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