异步方法签名错误。必须返回void,任务或任务<t>

时间:2017-04-20 13:39:52

标签: c# asynchronous

我有一个异步方法。

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

我用

来称呼它
await InsertConnectionStatusIntoAzureDatabaseAsync(device).ConfigureAwait(false);

Visual Studio不会建立async method must return void, Task or Task<T>

它也会使InsertConnectionStatusIntoAzureDatabaseAsync(device).ConfigureAwait(false);行变得曲折:

  

任务不包含ConfigureAwait()

的定义

文件顶部的用法是

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

它所针对的.net框架是4.6.1

2 个答案:

答案 0 :(得分:6)

您的项目中几乎肯定会有另一个名为Task的类,它与.Net Framework版本冲突。您可以通过转到Task类型的定义来查看它,并查看它引导您的位置。因此,要么将您的版本重命名为不同的版本(可能是最佳选项),要么使用完整的命名空间:

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

答案 1 :(得分:2)

您也可以使用命名空间别名,并在方法签名中使用它,如

using task = System.Threading.Tasks;

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