如何滚动我自己的异步等待方法?
我看到在某些情况下编写异步方法很容易:
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);
}
...它阻止了我的编译错误,“无法等待 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,但如果我这样做,它根本不会编译......