У меня есть программа, которая выполняет задачи с учетом контекста того, что пользователь хочет, и позволяет пользователю выполнять задачу асинхронно, пока они выполняют задачи в главном потоке. Однако если пользователь запускает асинхронную задачу (используя BackgroundWorker
), а затем пытается завершить задачу в главном потоке до завершения задачи BackgroundWorker, результат из основного потока возвращается в BackgroundWorker
.
Это упрощенная версия того, как я называю задачи:
public object DoTask(TaskType c)
{
if (c == TaskType.ReadLine)
{
return Console.ReadLine();
}
else if (c == TaskType.LongTask)
{
//imagine this takes a long time.
Thread.Sleep(2000);
return 5;
}
}
Вот метод BackgroundWorker
:
public void getLongTaskDone(DoWorkEventArgs e)
{
var result = DoTask(TaskType.LongTask); //this is the issue
}
И вот как я это называю:
//Task takes a long time.
var bw = new BackgroundWorker();
bw.DoWork += getLongTaskDone;
bw.RunWorkerAsync();
//Task takes barely any time.
var result = DoTask(TaskType.ReadLine);
Все, что я ввожу в задачу ReadLine
, затем возвращается в переменную "result" BackgroundWorker, а не в результат задачи, которая занимает много времени , Что будет причиной этой проблемы? Как бы я изменил дизайн, чтобы это исправить?