具有一个使用DbContext从sql返回结果的类库。 如果我想建立一个
类库方法可能需要几秒钟的时间。此类会在其Startup中注入到asp.net核心Webapp中
class Util
{
public string DoStuff(string colorVal) {
string ourValue = (from a in ctx.BigTable where a.color == colorVal select a.DoneFlag).FirstOrDefault();
return ourValue;
}
}
如果我打算从这样的代码中使用它,是否还需要使该方法异步
Web project
Util o;
public async Task<IViewComponentResult> InvokeAsync()
{
var item = await GetMatchingColorAsync();
return View(item);
}
private Task<string> GetMatchingColorAsync()
{
string matchingColor = o.DoStuff("red");
return Task.FromResult(matchingColor);
}
答案 0 :(得分:1)
理想上是。您甚至可以在使用FirstOrDefaultAsync
时使用它(取决于您的基础数据源是什么):
public async Task<string> DoStuff(string colorVal) {
string ourValue = await (from a in ctx.BigTable where a.color == colorVal select a.DoneFlag).FirstOrDefaultAsync();
var someColor = await GetMatchingColorAsync();
return ourValue;
}
Microsoft有一系列有关Asynchronous programming with async and await的文章,写得很好。他们值得一读。
如果您绝对不能更改调用方法,则可以同步等待:
public string DoStuff(string colorVal) {
string ourValue = (from a in ctx.BigTable where a.color == colorVal select a.DoneFlag).FirstOrDefault();
var someColor = GetMatchingColorAsync().GetAwaiter().GetResult();
return ourValue;
}
容易吗?除了会阻塞线程(您将失去异步方法的优势),而且还存在死锁的风险,如本文所述:Don't Block on Async Code。
那就不好了