Async Await Calls不处理其中一个调用

par*_*jai 0 c# asynchronous async-await c#-5.0 asp.net-mvc-4

我有2个并行调用,nCallAsync调用数据库SP在表A中执行一些插入,vCallAsync调用Web服务并在表A中记录数据.之后,我从表A中读取数据.但在我的代码中,我可以看到在表A读取之前在Profiler中执行nCallAsync,但是没有来自nCallAsync的数据,只有获取数据的方法是,如果我一起停止其他任务

Task<int> nCTask = nCallAsync();
Task<int> vCTask = vCallAsync();
int n = await nCTask;
int v = await vCTask;
Run Code Online (Sandbox Code Playgroud)

我对这种行为感到很困惑

任何帮助都非常感谢

async Task<int> nCallAsync()
{
    int i = 0;
    i =     Logdata(this.Id, this.var1, var2);
    return i;
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*rvy 6

你的async方法没有await.您应该看到编译器警告您确切地告诉您.因为没有await,所以没有不同步; 你有一个完全同步的方法恰好将其结果包装在一个Task.

这里有两个一般选项.

  1. 将您正在执行的实际IO从同步IO更改为异步IO.可以修改Web服务代码以生成任务返回方法,而不是在IO发生时阻塞的方法.然后await,您可以使用那些IO方法,而不是让您的async方法调用阻塞IO.

  2. 只需使整个应用程序同步即可.摆脱asyncnCallAsync(并删除Async后缀).然后只需调用方法Task.Run,在另一个线程中执行操作.这个选项几乎没有那么好,因为你有一个线程池线程只是等待异步操作,但如果实际使用完全异步IO是不可能或不可行的,有时候你不得不求助于此.