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

时间:2014-04-29 15:17:23

标签: c# asp.net-mvc-4 asynchronous async-await c#-5.0

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

Task<int> nCTask = nCallAsync();
Task<int> vCTask = vCallAsync();
int n = await nCTask;
int v = await vCTask;

我对这种行为感到困惑

非常感谢任何帮助

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

1 个答案:

答案 0 :(得分:6)

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

这里有两个常规选项。

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

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