Я хочу, чтобы этот метод запустился, создал фоновый процесс и завершил работу. Я не хочу await
для завершения асинхронной операции, я просто хочу, чтобы какой-то процесс работал в фоновом режиме.
- Я пытался использовать
Task.Run
, но когда я пытаюсь отладить код внутри него, точка останова никогда не срабатывает. - Я подумал, что, возможно, Task.Run предназначен только для операций, которые следует ожидать, поэтому я попытался использовать BackgroundWorker и поставить точки останова в обоих местах,
Task.Run
и BackgroundWorker.DoWork
. - Теперь точка останова внутри Task.Run ударяется дважды, но точка останова внутри BackgroundWorker пропускается.
public override void Connect()
{
// Uncomment code below and breakpoint inside Task.Run starts magically working :)
//var bgw = new BackgroundWorker();
//bgw.DoWork += (_, __) => { Thread.Sleep(1000); };
//bgw.RunWorkerCompleted += (_, __) => {};
//bgw.RunWorkerAsync();
Task.Run(() => {
while (true) // Breakpoint here will NOT work
{
var x = 1; // Do something
}
});
// Thread.Sleep(5000); // Uncommenting this also makes breakpoint working
}
Вопрос
Почему точка останова внутри асинхронного c процесса не используется и как правильно создать процесс, который будет работать даже после завершения метода, который создал этот процесс?
Обновление
Похоже, что основной процесс завершается до создания задачи, потому что, если я добавлю Thread.Sleep(5000)
сразу после Task.Run
оно достигает точки останова. Скорее всего, это ожидаемое поведение, чтобы убедиться, что основной процесс завершает все дочерние потоки перед выходом.