winform+Task+async

一个有意思的问题:

假设一个winform程序,需要运行异步任务进行业务处理,那么最常见的实践方式是怎样的?

那肯定是task+async呀,对,就是这样,但如果想让windows 挂载这个程序,使用命令行运行,那么原有的方法还可行吗?比如以下代码:

 private void Form1_Load(object sender, EventArgs e)
 {
     LogHelper.WriteLog("", "", "Form1_Load");
     var args = Environment.GetCommandLineArgs();
     if (args != null && args.Length> 1)
     {
         if (args.Contains("-a"))
         {
             Task ts = Task.Run(async () =>
             {
                 //...
             });
             ts.ContinueWith(t => {
                 LogHelper.WriteLog("", "", "end");
                 Application.Exit();
             });
         }
     }
 }    

答案是不行的,因为task运行的是异步任务,那么这个异步任务是交给后台线程处理的,而task会立即返回,从而触发ContinueWith,从而关闭整个程序。

而理解了这一点,就会明白了,其实非常简单,既然是task运行异步任务,那么就在异步任务运行后再执行ContinueWith好了,于是在task后添加一行代码:

ts.Wait();

添加此行代码后,程序在被调用时会始终等待异步处理结果,一旦处理完成,则会自动结束程序。

posted @ 2025-10-19 18:58  Shapley  阅读(7)  评论(0)    收藏  举报