我有一个 WebAPI ASP.NET 解决方案。我已将 web.config 设置为:
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
在通话中,我需要获得 3 个任务的结果(每个 10 秒):
Task<Cat> catAsync = GetCatAsync();
Task<Dog> dogAsync = GetDogAsync();
Task<Pig> pigAsync = GetPigAsync();
await Task.WhenAll(catAsync , dogAsync , pigAsync );
cat= catAsync.Result;
dog= dogAsync.Result;
pig= pigAsync.Result;
我可以调用一次,但随后对此的调用似乎只是死在一个线程中,Cat and Dog 可能会运行,但 Pig 似乎会蒸发。大约一分钟后,这些开始出现:
The thread '<No Name>' (0x2f60) has exited with code 0 (0x0).
The thread '<No Name>' (0x974) has exited with code 0 (0x0).
The thread '<No Name>' (0x1ea8) has exited with code 0 (0x0).
我的任务如下所示:
private async Task<Cat> CatAsync()
{
await Task.Run(() =>
{
//Use WCF to get some data from a service
});
return cat;
}
运行 IISRESET 让我再次运行该站点。
*编辑
在阅读了 Panagiotis Kanavos 的答案后,我在下面发布了适用于此示例的解决方案