相关疑难解决方法(0)

await vs Task.Wait - 死锁?

我不太明白之间的差别Task.Wait和await.

我在ASP.NET WebAPI服务中有类似于以下函数:

public class TestController : ApiController
{
    public static async Task<string> Foo()
    {
        await Task.Delay(1).ConfigureAwait(false);
        return "";
    }

    public async static Task<string> Bar()
    {
        return await Foo();
    }

    public async static Task<string> Ros()
    {
        return await Bar();
    }

    // GET api/test
    public IEnumerable<string> Get()
    {
        Task.WaitAll(Enumerable.Range(0, 10).Select(x => Ros()).ToArray());

        return new string[] { "value1", "value2" }; // This will never execute
    }
}
Run Code Online (Sandbox Code Playgroud)

哪里Get会僵局.

什么可能导致这个?当我使用阻塞等待而不是await Task.Delay?时,为什么这不会导致问题?

c# deadlock task-parallel-library async-await

169
推荐指数
3
解决办法
13万
查看次数

任务构造函数与具有异步操作的Task.Run - 不同的行为

任何人都可以解释一下,也许我错过了一些明显的东西.

这两个案例的行为似乎相同,但事实并非如此.

案例1:

案例2:

第一种情况表现如预期:等待任务在第一种情况结束后,在2秒后结束.

第二种情况很奇怪:等待任务很快就会结束,早在第一种情况发生之前.

从两个任务打印消息时很容易看到.第二个任务结束时的打印将显示差异.

我正在使用VS 2015 Preview,它可能使用Roslyn进行编译,如果这很重要的话.

.net c# task task-parallel-library async-await

4
推荐指数
1
解决办法
3435
查看次数

标签 统计

async-await ×2

c# ×2

task-parallel-library ×2

.net ×1

deadlock ×1

task ×1