3 回答
TA贡献1841条经验 获得超3个赞
请注意,使用async不使用的方法await被认为是不好的样式。如果你有一个返回任务的同步方法,你应该使用Task.FromResult:
public Task<bool> DoSomeStuffWithAsync()
{
return Task.FromResult(true);
}
但是,是的,仅此而已:返回任务的同步方法。它没有异步,所以它实际上与只返回一个布尔值的普通同步代码没有任何不同。
直接返回任务而不是返回值还有好处吗?那要看。有时,您可能需要实现一个异步接口,但实际上并没有异步实现它。但是,如果您不必这样做,并且您也不考虑最终更改您的实现以实际异步执行某些操作,那么让您的方法返回任务没有任何好处。
至于调用,await DoSomeStuffWithAsync()将运行DoSomeStuffWithAsync()然后等待它返回的任务。既然DoSomeStuffWithAsync()是同步的,任务会直接返回,既然任务已经完成,await就可以直接继续。所以这与同步调用方法非常相似。但是,它的存在await确实会对运行时行为产生影响,因为这将使调用方法实际上是异步的(即使被调用的代码是同步的)。
但由您决定这是否适合您的情况。不过,一般来说,当不涉及真正的异步过程时,您可能应该避免让它看起来是异步的。
TA贡献1784条经验 获得超2个赞
简而言之,async关键字不会使方法异步运行。它只允许方法在await里面调用关键字。这就是魔法发生的地方。在您的情况下,您在任何地方都没有任何await关键字表明您的方法确实没有异步运行。
TA贡献1772条经验 获得超6个赞
你的方法返回不同的东西。DoSomeStuffWithAsync() 返回一个Task<bool>. 您可以在没有“async”关键字的情况下调用它 - 同步 - 编译器将在方法完成后返回包装在实例中的Task<bool>bool - 它在幕后执行此操作。另一个“区别”是您如何处理返回的值。 .
var task = DoSomeStuffWithAsync(); // Synchronous call
Console.WriteLine(task.Result); // You must unpack the bool result...
您的其他方法只返回一个布尔值 - 它只是一个标准的同步调用/返回......
var result = DoSomeStuff(); // Synchronous call
Console.WriteLine(result); // Just use the result
从行为的角度来看,要回答您的具体问题,两者的行为都是同步的。另一种看待它的方式:
var act = new Func<Task<bool>>(async () => await DoSomeStuffWithAsync());
var result = act(); // will complete when DoSomeStuffWithAsync completes
希望这能回答你的问题。
- 3 回答
- 0 关注
- 241 浏览
添加回答
举报
