Уведомить асинхронное задание об успешно выполненном задании в другом классе - PullRequest
0 голосов
/ 03 июля 2019

У меня есть класс, который периодически запускает задачу, назовем его Task1.В другом классе у меня есть задача Task2 (которая выполняется постоянно), в которой я хочу дождаться, пока Задача1 завершит использование await, и только затем продолжить выполнение кода в Задаче 2.

Экземпляр класса Задачи1является свойством класса 2. Я использую этот экземпляр в своем Task2

Моя проблема заключается в том, что в настоящее время я не могу заставить Task2 реагировать только тогда, когда Task1 завершено, код ожидания вызывается каждый разу меня запускается Task2.

Класс с Task1:

public Task<string> Task1()
        {
            TaskCompletionSource<string> tcs = new TaskCompletionSource<string>();

            try
            {
                //Do something and get string result

                if (result!= null)
                {
                    tcs.TrySetResult(result);
                }
                else
                {
                    //...
                }
            }
            catch (Exception ex)
            {

                //...
            }

            return tcs.Task;
        }        

Класс с Task2:

Task2 = Task.Run(async () =>
            {
                try
                {
                    while (terminateTask2 == false)
                    {
                        string result = await Class1.Task1();  

                        //continue doing stuff with result                        
                    }
                }
            }                        

В данный момент всегда вызывается строка string result = await Class1.Task1();, мойцель состоит в том, чтобы это происходило только в том случае, если произошла Задача 1.

Я хочу, чтобы Задача 1 уведомила Задачу2, что она успешно выполнена, и только тогда Я бы хотела, чтобы Задача2 продолжала выполнять оставшуюся часть кода..

Как я могу сделать эту работу?

...