我对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
。那是什么意思呢?我完全糊涂了。请帮帮我。
答案 0 :(得分:2)
如果您在代码中使用await
,则需要在方法上使用async
关键字。
如果您使用async
并希望返回实际类型,则可以将该类型作为通用任务返回,如Task<int>
。
以下是async
方法的有效返回类型:
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/async-return-types
Task<TResult>
,用于返回值的异步方法。 Task
,用于执行操作但不返回任何值的异步方法。void
,用于事件处理程序。答案 1 :(得分:0)
(...)“async”。这个关键字 允许在方法内部使用“await”一词,并且 修改方法处理结果的方式。就是这样。
该方法同步运行,直到找到“await”这个词为止 word是照顾异步的那个。 “Await”是一名运营商 接收参数:awaitable(异步操作) 表现得这样:
来自here