首页 > 解决方案 > c#/core 关闭应用程序但允许子进程继续运行

问题描述

我正在尝试处理由 MTA 触发的事件。

MTA 调用以下代码/exe。它不会继续,直到exe退出。

我需要 MTA 继续(exe 退出),而其中的代码Process仍在运行。

我假设当我创建任务时,因为它是一个子进程,所以主上下文完成会终止子上下文。

我还尝试将其与其他方法一起创建为新线程。

请有人解释我将如何实现这一目标?

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Task.Run(() => new Foo().Process(args));
        }
    }

    class Foo
    {
        public async void Process(string[] args)
        {
            // do something
            await Task.delay(200);
            // do something
        }
    }
}

标签: c#.net-core

解决方案


我认为您想要的是async.NET Core 现在支持的 Main 方法。这样您就可以等待处理,并且该过程将保持打开状态,直到处理完成。

这是您的示例更改为这种方法。我将等待时间增加到 5 秒,以便更明显。

namespace ConsoleApp4
{
   class Program
   {
      static async Task Main(string[] args)
      {
         await new Foo().Process(args);
      }

      class Foo
      {
         public async Task Process(string[] args)
         {
            // do something
            await Task.Delay(5000);
            // do something
         }
      }
   }
}

推荐阅读