等待2个任务,一个正在等待另一个任务

时间:2018-04-20 13:33:22

标签: c# task

等待2个任务是否是线程安全的(其中一个任务正在等待另一个)?

public async Task<string> Operation1(){}

public async Task<string> Operation2( Task waitMe)
{
    if(DoSomethingSuccess())
        return "EarlySuccess";

    var result = await waitMe;
    return SomeSideEffectThat( result); // I read result
}

void async Task<string> MyMainFunction(){

    Task<string> t1 = Operation1();
    Task<string> t2 = Operation2( t1);

    var result = await Task.WaitAny( new Task<string> { t1, t2});
    if(results.Status == TaskStatus.RanToCompletion)
        return result;

    return "ExceptionOccurred";


}

我有兴趣从其中一个任务获得第一个结果,并最终执行副作用的第二个任务。假设副作用已经是线程安全的,我对“t2”“t1”和“结果”存储的竞争条件感兴趣。

我需要两个操作并行运行,这就是为什么我不用T2继续T1,只是T2需要T1来执行一些额外的操作

1 个答案:

答案 0 :(得分:0)

为什么不使用ContinueWith

  Task.Factory.StartNew(() => negate(5))
         //you can go with another task here  
        .ContinueWith(antecendent => negate(antecendent.Result))        ;