Функция, возвращающая результат из неверного потока - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть программа, которая выполняет задачи с учетом контекста того, что пользователь хочет, и позволяет пользователю выполнять задачу асинхронно, пока они выполняют задачи в главном потоке. Однако если пользователь запускает асинхронную задачу (используя 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, а не в результат задачи, которая занимает много времени , Что будет причиной этой проблемы? Как бы я изменил дизайн, чтобы это исправить?

...