C# 我必须做些什么才能使我的方法值得期待?
如何滚动我自己的异步等待方法 我发现在某些情况下编写异步方法非常简单:C# 我必须做些什么才能使我的方法值得期待?,c#,windows-8,async-await,windows-store-apps,C#,Windows 8,Async Await,Windows Store Apps,如何滚动我自己的异步等待方法 我发现在某些情况下编写异步方法非常简单: 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 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 wait int”阻止我;设计时的一个提示类似地告诉我,“不能等待输入'int'
我也尝试了同样的结果:
Task<int> i = await TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5);
…也就是说,它可以编译,但它从不“移动”
在运行时,它告诉我应该“等待”对TestAsyncWait()的调用,但如果我这样做,它根本不会编译…您只需要返回一个等待的<代码>任务/任务
是常见的选择<代码>任务可以使用任务创建。运行
(在后台线程上执行代码)或任务完成源
(包装异步事件)
阅读以了解更多信息。您需要使用等待的退货或退货
任务
private异步任务TestGeo()
{
Geolocator geo=新的Geolocator();
返回wait-geo.GetGeopositionAsync();
}
专用异步任务TestAsyncWait()
{
返回wait wait TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5);
}
var something=Task.Factory.StartNew(()=>0);
等等;
整数=某物。结果;
您的方法
private async Task TestAsyncAwait()
{
int i = await TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5);
}
应该这样写
private async Task TestAsyncAwait()
{
Task<int> t = new Task<int>(() =>
{
return TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5);
});
t.Start();
await t;
}
专用异步任务TestAsyncWait()
{
任务t=新任务(()=>
{
返回TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5);
});
t、 Start();
等待t;
}
如果需要返回int,请替换任务类型:
private async Task<int> TestAsyncAwait()
{
Task<int> t = new Task<int>(() =>
{
return TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5);
});
t.Start();
return await t;
}
专用异步任务TestAsyncWait()
{
任务t=新任务(()=>
{
返回TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5);
});
t、 Start();
返回等待t;
}
int i=wait Task.Run(()=>TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5))代码>我建议您阅读,这样lambda不仅是必要的,而且现在是必须的?至少到目前为止,我一直把它们看作是聪明的把戏。你确定你想让它成为可以期待的吗?不,我只是在试验——我想知道如何让方法成为可以期待的,这样我就可以在需要的时候“做到奶牛回家”或“甚至不想(太多)”了。问题是关于#2,而对于#2,错误是这样说的“Type'int'is not waitible”downvote,因为OP显然正在尝试异步执行此操作多亏aaronburro添加了downvote解释。这太罕见了。链接已失效
var something = Task<int>.Factory.StartNew(() => 0);
something.Wait();
int number = something.Result;
private async Task TestAsyncAwait()
{
int i = await TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5);
}
private async Task TestAsyncAwait()
{
Task<int> t = new Task<int>(() =>
{
return TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5);
});
t.Start();
await t;
}
private async Task<int> TestAsyncAwait()
{
Task<int> t = new Task<int>(() =>
{
return TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5);
});
t.Start();
return await t;
}