c # / core закрывает приложение, но позволяет дочернему процессу продолжать работу - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь обработать события, вызванные 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
        }
    }
}

1 Ответ

1 голос
/ 03 мая 2020

Я думаю, что вы хотите async Основной метод, который теперь поддерживается в. NET Core. Таким образом, вы можете дождаться обработки, и процесс останется открытым, пока обработка не будет завершена.

Вот ваш пример, измененный на этот подход. Я увеличил время ожидания до 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
         }
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...