在另一个类中通知异步任务成功完成的任务

时间:2019-07-03 11:09:47

标签: c# async-await taskcompletionsource

我有一个定期运行任务的类,我们称它为Task1。在另一堂课中,我有一个任务Task2(不断运行),在这里我要等待Task1使用await完成,然后才继续在Task2中执行代码。

Task1类的实例是类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();,我的目标是仅在Task1发生时才发生。

我希望Task1通知Task2成功完成,并且只有这样,我希望Task2继续执行其其余代码。

我该如何做?

0 个答案:

没有答案