异步方法签名错误。必须返回void、Task或Task<T>。

3

我有一个异步方法。

private static async Task InsertConnectionStatusIntoAzureDatabaseAsync(Device device)
{
   ...
}

我称之为“调用”。
await InsertConnectionStatusIntoAzureDatabaseAsync(device).ConfigureAwait(false);

Visual Studio编译时提示一个错误:异步方法必须返回void、Task或Task<T>。

同时,以下代码行:InsertConnectionStatusIntoAzureDatabaseAsync(device).ConfigureAwait(false);出现红色波浪线,提示:

Task不包含名为ConfigureAwait()的定义。

文件顶部的引用如下:

using System.Threading.Tasks;
using System.Threading;

它针对的.NET框架版本是4.6.1。


6
你的项目中是否也有一个叫做Task的冲突类? - DavidG
哦,天啊!就是这个。在一个有247,000行代码的文件中,有一个名为Task的类被埋藏了起来!如果你把这个作为答案,我会标记它为正确的。 - Stuart
247k行代码?!希望那是自动生成的,否则你真的需要进行一些重构了! - DavidG
2个回答

6

您的项目中几乎肯定有另一个名为Task的类,这与.Net Framework版本发生了冲突。您可以通过查看Task类型的定义并查看其引导到何处来验证此信息。因此,要么将您的版本重命名为某个不同的名称(可能是最佳选项),要么使用完整的命名空间:

private static async System.Threading.Tasks.Task InsertConnectionStatusIntoAzureDatabaseAsync()
{
    //snip
}

2
你可以使用命名空间别名,并在方法签名中使用它,例如:
using task = System.Threading.Tasks;

    private static async task.Task InsertConnectionStatusIntoAzureDatabaseAsync(Device device)
    {
       ...
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接