Joh*_*ohn 5 c# wpf multithreading task-parallel-library
作为一个简单的例子,我有一个WPF应用程序,主窗口上有一个按钮,因此代码背后:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
async void Button_Click(object sender, RoutedEventArgs e)
{
await Task<bool>.Run(() => this.DoOnThread());
}
async Task<bool> DoOnThread()
{
Thread.CurrentThread.Name = "MyTestThread";
Thread.Sleep(1000);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我通过VisualStudio线程窗口中断"返回true"我可以获取ThreadID,如果我继续并让代码运行完成并等待一段时间直到线程退出,我得到"线程0x9ad34已经退出代码259(0x103) )"显示在VS输出窗口中.
我做错了什么,如何确保线程退出代码为0?
Pan*_*vos 15
Task.Run并没有创建一个线程.它安排委托在ThreadPool线程上运行.根据CPU负载创建或销毁线程池中的线程.
您看到的退出代码与您的代码没有任何关系:它可能只是一个Visual Studio调试消息,或退出的ThreadPool线程.
此外,async并不意味着方法将异步运行.它是语法糖,允许编译器创建代码以异步等待标记的任何异步方法await.在您的情况下,DoOnThread没有异步调用,await因此它将同步运行.
实际上,编译器甚至会发出一个DoOnThread不包含的警告,await因此它会同步运行