我该如何编写自己的异步可等待方法?
我发现在某些情况下编写异步方法非常容易:
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()的调用,但如果我这样做的话,它根本无法编译...
int i = await Task.Run(() => TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5));
- L.B