C# 如何在main函数中调用有返回值的async/await才不会阻塞主线程?
时间: 2024-09-26 11:14:17 浏览: 23
在C#的`Main`函数中调用有返回值的`async`/`await`方法,实际上是在处理异步操作,但为了避免阻塞主线程,你需要使用`async`修饰`Main`函数,并使用`await Task.Run(() => ...)`或`await YourAsyncFunction().ConfigureAwait(false);`这样的结构。这里是一个例子:
```csharp
public static async Task Main(string[] args)
{
try
{
// 使用 Task.Run 来包装异步操作,防止阻塞主线程
var result = await Task.Run(() => YourAsyncFunctionThatReturnsSomething());
// 然后你可以在这里处理返回值
Console.WriteLine("Result: " + result);
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
```
或者如果你希望在当前线程上运行但不受配置上下文影响:
```csharp
public static async Task Main(string[] args)
{
// 使用 ConfigureAwait(false) 来确保不保持上下文
var result = await YourAsyncFunctionThatReturnsSomething().ConfigureAwait(false);
// 然后处理结果
Console.WriteLine("Result: " + result);
}
```
这两种方式都可以让你的`Main`函数在等待异步操作完成时,主线程保持活动状态。