c#等待 多线程结果不阻塞
时间: 2023-07-26 12:34:32 浏览: 64
在 C# 中等待多线程结果不阻塞可以使用异步编程的方式。具体来说,可以使用 async/await 关键字来实现异步等待多线程结果的操作。
首先,将需要执行的多线程任务封装在一个异步方法中,并返回一个 Task 对象,表示异步操作的结果。在调用该异步方法时,使用 await 关键字等待异步操作的完成,而不会阻塞主线程。
示例代码如下:
```csharp
async Task<int> DoAsyncWork()
{
int result = await Task.Run(() =>
{
// 执行需要在多线程中完成的操作
return 1 + 2;
});
return result;
}
// 调用异步方法并等待结果
Task<int> task = DoAsyncWork();
// 执行其他操作
// ...
// 获取异步操作的结果,如果异步操作未完成,则会等待其完成
int result = await task;
```
在上述示例中,异步方法 DoAsyncWork() 中使用 Task.Run() 方法开启了一个新的线程来执行需要在多线程中完成的操作。在调用 DoAsyncWork() 方法时,使用 await 关键字等待异步操作的完成,并将结果赋值给一个 Task<int> 对象。在获取异步操作的结果时,使用 await 关键字等待异步操作的完成,并将结果赋值给一个 int 变量。
需要注意的是,await 关键字只能在异步方法中使用,否则会编译错误。另外,异步方法的返回值类型必须是 Task 或 Task<TResult>,表示异步操作的结果。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)