无法修复异步的返回类型

Posted

技术标签:

【中文标题】无法修复异步的返回类型【英文标题】:Can't fix return type on Async 【发布时间】:2014-04-04 18:22:06 【问题描述】:

我目前遇到这个问题和这个错误:

问题:我无法弄清楚如何解决我遇到的错误,即使我在 Google 搜索等上阅读了有关它的文档。真的,不要再告诉我这样做了,我不知道不知道怎么做!

错误:异步方法的返回类型必须为 void,Task 或 Task

代码:

private async Geoposition userLocation()
    
    Geolocator geolocator = new Geolocator();
    geolocator.DesiredAccuracyInMeters = 50;
    try
    
        Geoposition geoposition = await geolocator.GetGeopositionAsync(maximumAge:TimeSpan.FromMinutes(5),timeout:TimeSpan.FromSeconds(10));
        return geoposition;
    
    catch (UnauthorizedAccessException)
    
        return null;
    
    return null;

【问题讨论】:

【参考方案1】:

该错误准确地告诉您问题所在。您的方法必须是voidTaskTask<T>

将您的方法签名更改为:

private async Task<Geoposition> userLocation()  ... 

【讨论】:

谢谢,我实际上不知道我可以返回这样的值。我不知道那个任务符号:) 我现在不明白的是如何从调用它的函数中读取返回值。我不能只制作一个 Geoposition 位置变量,它告诉我它不能从 Task 转换。你会怎么做? 没关系,我通过以下方式修复它: Geoposition currentPosition = await userLocation();我添加了 await 并且它起作用了:)【参考方案2】:

正如错误试图对您说的那样:您需要将函数的返回类型更改为任务,因此它看起来像这样:

private async Task<Geoposition> userLocation

【讨论】:

【参考方案3】:

当您使用async 时,您应该返回TaskTask&lt;T&gt;void

private async Task<Geoposition> userLocation()

    //Do something here

你可以查看this documentation关于异步返回类型

【讨论】:

以上是关于无法修复异步的返回类型的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法在具有 void 返回类型的异步函数中捕获异常?

如何修复返回“未定义”的异步函数?

异步的返回类型

C#异步方法async/await的三种返回类型

如何修复“函数声明了一个不透明的返回类型,但在其主体中没有返回语句来推断基础类型”错误?

C#中异步方法的返回类型