gpt4 book ai didi

c# - 一路async await async

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:33 27 4
gpt4 key购买 nike

我是 c# 异步等待机制的新手。一路看了一些关于async的文章(http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html)。我在下面有一个例子,你能告诉我第一个 Initialize 方法是否会导致死锁,为什么?提前谢谢你。

public class Test {

public async Task DoSomeWorkAsync() {
await DoSomeWork1Async();
}

// This method is mixed with Wait and async await, will this cause lead lock?
public void Initialize() {
Task.Run(() => DoSomeWorkAsync()).Wait();
}

// This method is following async all the way
public async Task InitializeAsync() {
await DoSomeWorkAsync();
}

}

// Update: Here is the context where two Initialize methods are called
public class TestForm : Form {
// Load Form UI
public async void OnLoad() {
var test = new Test();
test.Initialize();
await test.InitializeAsync();
}
}

最佳答案

不,这不会死锁,因为您阻塞了ThreadPool 线程执行且没有SynchronizationContext 的任务。由于它不在 UI 线程上运行,因此没有什么可以阻止该任务完成,因此不存在死锁。

如果这是你的代码,它会死锁:

public void Initialize()
{
DoSomeWorkAsync().Wait();
}

虽然这仍然不是阻止的好理由,但您应该一直使用 async-await。

关于c# - 一路async await async,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32188568/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com