具有和不具有Async的任务返回类型

时间:2017-12-07 19:37:23

标签: c# .net asynchronous async-await task-parallel-library

我对async关键字的行为感到有点困惑。

假设我有两种方法,

public async Task DoSomething1()
{
    await Task.Run(() =>
    {
        for(int i = 0; i<3; i++)
        {
            Console.WriteLine("I m doing something:" + i);
        }
    });
}

public Task DoSomething2()
{
    return Task.Run(() =>
    {
        for(int i = 0; i<3; i++)
        {
            Console.WriteLine("I m doing something:" + i);
        }
    });
}

据我所知,这两种方法都是可以接受的。但是当我编写一个没有Task关键字的async返回类型的方法时,我需要返回Task,否则编译器会生成错误。一个方法应该返回它的类型是常见的事情。但是当我使用async关键字时,编译器会生成另一个错误,您无法返回Task。那是什么意思呢?我完全糊涂了。请帮帮我。

2 个答案:

答案 0 :(得分:2)

如果您在代码中使用await,则需要在方法上使用async关键字。

如果您使用async并希望返回实际类型,则可以将该类型作为通用任务返回,如Task<int>

以下是async方法的有效返回类型:

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/async-return-types

  1. Task<TResult>,用于返回值的异步方法。
  2. Task,用于执行操作但不返回任何值的异步方法。
  3. void,用于事件处理程序。

答案 1 :(得分:0)

  

(...)“async”。这个关键字   允许在方法内部使用“await”一词,并且   修改方法处理结果的方式。就是这样。

     

该方法同步运行,直到找到“await”这个词为止   word是照顾异步的那个。 “Await”是一名运营商   接收参数:awaitable(异步操作)   表现得这样:

来自here