今天在.netcore控制台上调用sync的void方法,还没执行就退出了~~~

找了下原因,在 C# 中,async void 方法是一种特殊的异步方法,通常用于事件处理程序。然而,直接在 Main 方法中调用 async void 方法会导致程序提前退出,因为 async void 方法不会等待其内部的异步操作完成。

C# main 调用async void方法自动退出 方法


问题原因

  • async void 方法没有返回 Task,因此调用方无法等待其完成。

  • Main 方法是程序的入口点,如果 Main 方法执行完毕,程序会立即退出,而不会等待异步操作完成。


解决方法

以下是几种解决 Main 方法调用 async void 方法导致程序退出的方法:


方法 1:将 Main 方法改为 async Task

从 C# 7.1 开始,Main 方法可以定义为 async Task,这样可以等待异步方法完成。

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        await SomeAsyncMethod();
        Console.WriteLine("异步方法执行完成!");
    }

    static async Task SomeAsyncMethod()
    {
        await Task.Delay(1000); // 模拟异步操作
        Console.WriteLine("异步操作完成!");
    }
}

方法 2:使用 Task.Run 包装 async void 方法

如果无法修改 async void 方法,可以使用 Task.Run 将其包装为一个 Task,然后等待其完成。

using System;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        Task.Run(() => SomeAsyncVoidMethod()).Wait(); // 等待异步方法完成
        Console.WriteLine("异步方法执行完成!");
    }

    static async void SomeAsyncVoidMethod()
    {
        await Task.Delay(1000); // 模拟异步操作
        Console.WriteLine("异步操作完成!");
    }
}

总结

  • 尽量避免使用 async void 方法,改为使用 async Task

  • 如果必须使用 async void 方法,可以通过 Task.Run 或 TaskCompletionSource 等待其完成。

  • 从 C# 7.1 开始,可以将 Main 方法定义为 async Task,以简化异步编程。

通过以上方法,您可以解决 Main 方法调用 async void 方法导致程序退出的问题。

以上就是【C# main 调用async void方法自动退出】的全部内容了,欢迎留言评论进行交流!

赞(0) 踩(0)

与本文相关的软件

发表我的评论

最新评论

  1. 暂无评论