独自の async awaitable メソッドをロールするにはどうすればよいですか?
場合によっては、非同期メソッドを書くのは簡単です。
private async Task TestGeo()
{
Geolocator geo = new Geolocator();
Geoposition pos = await geo.GetGeopositionAsync();
double dLat = pos.Coordinate.Latitude;
double dLong = pos.Coordinate.Latitude;
}
...しかし、悲しいことに、任意のメソッドを非同期にすることができるわけではないこともわかります。つまり、これは機能しません:
private async Task TestAsyncAwait()
{
int i = await TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5);
}
...コンパイルエラー「Cannot await int」で停止します。設計時のヒントも同様に、「タイプ「int」は待機できません」と教えてくれます
私も同じ結果でこれを試しました:
Task<int> i = await TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5);
メソッドを待機可能にするにはどうすればよいですか?
アップデート
Linebacker と S. Cleary が指摘したように (KNBR にいた猫との関係はありますか?)、これは機能します。
int i = await Task.Run(() => TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5));
...つまり、コンパイルされますが、「移動」することはありません。
実行時に、TestAsyncAwait() への CALL を「待機」する必要があると通知されますが、それを行うと、まったくコンパイルされません...