And*_*ock 13 .net c# asp.net-mvc async-await
如何避免为异步和非异步方法编写相同的代码两次.我目前正在使用ASP.NET,因此我目前正在使用请求线程,并且我很快就知道他在代码下面(应该显示我的意图),这肯定是错误的做法.
应用程序死锁,因为await关键字试图返回.Result阻塞的同一线程.
我这样做的全部原因是避免两次编写相同的"FindAll"代码.
public IEnumerable<Resource> FindAll()
{
return FindAllAsync().Result;
}
public async Task<IEnumerable<Resource>> FindAllAsync()
{
return await Context.Resources.ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)
那你怎么解决这个问题呢?
Ste*_*ary 12
如何避免为异步和非异步方法编写相同的代码两次.
在一般情况下,你不能.
有问题的操作要么是自然异步的,要么是自然同步的.在此示例(数据库请求)中,它自然是异步的.因此,使API异步.就这些.
Stephen Toub有一对着名的博客文章我应该为异步方法公开同步包装器吗?和我应该揭露异步包装器同步的方法呢?对这两个问题的简短回答是"不".
你可以做各种黑客来暴露这两种类型的API(斯蒂芬在他的帖子中涵盖了每种方法),但与缺点相比,其好处是微不足道的.
| 归档时间: |
|
| 查看次数: |
2263 次 |
| 最近记录: |