异步方法.Result vs Sync方法

Ole*_*kin 2 .net c# asynchronous async-await

这两种方法的工作方式是否相同?这两个都阻塞了主线程,不是吗?

// 1. Use async method
public IEnumerable<Entity> AsyncMethod()
{
    return Context.Entities.ToListAsync().Result;
}

// 2. Use sync method
public IEnumerable<Entity> SyncMethod()
{
    return Context.Entities.ToList();
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 15

对于你提到的具体 API,我不知道它们是否相同; 这些API的专家应该回答.

在一般,如果有一个同步API和异步API,正在采取保证是一样的同步API异步API的结果?

不.作为合同的一部分,同步API应保证在合理的时间内产生结果或异常. 取Result一个异步API的被允许"死锁".

这是因为允许异步API通过调度将来在当前线程上完成的工作,然后在完成后运行相关任务的延续来工作.通过Result同步要求,你可以进入这个线程上计划将来运行工作的情况,但是这个线程现在阻塞,直到工作完成,并且我们有一个单线程的死锁情况.

有关导致死锁的原因以及如何防止死锁的详细信息,请参阅此文章.

完成任务几乎不是正确的做法Result.如果您需要任务的结果,await那么.