我必须做些什么来使我的方法等待?

我怎样才能推出我自己的asynchronous等待方法?

我发现在某些情况下编写asynchronous方法很容易:

private async Task TestGeo() { Geolocator geo = new Geolocator(); Geoposition pos = await geo.GetGeopositionAsync(); double dLat = pos.Coordinate.Latitude; double dLong = pos.Coordinate.Latitude; } 

…但是,不幸的是,也可以看到,不是任何方法都可以做到asynchronous无聊, 机智:这不起作用:

 private async Task TestAsyncAwait() { int i = await TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5); } 

它阻止了我的编译错误,“不能等待int”; 在devise时间的一个提示同样告诉我,“types”int“不等于”

我也试过这个结果:

  Task<int> i = await TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5); 

我必须做些什么来使我的方法等待?

UPDATE

作为中后卫和S. Cleary表示(与曾经在KNBR上的猫有任何关系?),这是有效的:

 int i = await Task.Run(() => TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5)); 

也就是说,它编译 – 但它永远不会“移动”。

在运行时,它告诉我我应该“等待”CALL到TestAsyncAwait(),但是如果我这样做,它根本不会编译…

4 Solutions collect form web for “我必须做些什么来使我的方法等待?”

你只需要返回一个等待。 Task / Task<TResult>是常用的select; 可以使用Task.Run (在后台线程上执行代码)或TaskCompletionSource<T> (包装一个asynchronous事件)来创buildTask

阅读基于任务的asynchronous模式以获取更多信息。

你的方法

 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; } 

如果您需要返回int,请replaceTasktypes:

 private async Task<int> TestAsyncAwait() { Task<int> t = new Task<int>(() => { return TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5); }); t.Start(); return await t; } 

这里更多的解释。

 var something = Task<int>.Factory.StartNew(() => 0); something.Wait(); int number = something.Result; 

您需要消耗等待的返回或返回Task<Type of await call>

  1.  private async Task<Geoposition> TestGeo() { Geolocator geo = new Geolocator(); return await geo.GetGeopositionAsync(); } 
  2.  private async Task<int> TestAsyncAwait() { return await TaSLs_Classes.TASLsUtils.GetZoomSettingForDistance(5); }