小编Dor*_*rey的帖子

C#:运行N个任务的正确方法,等待第一次成功(检查它),停止其他任务并将结果尽快返回给用户

我们有不同的长期程序,成功和不成功的结果。我们希望并行运行这些任务,并返回用户第一个成功的结果。停止其他任务也会很棒。

我试过 Task.WhenAny 和 Parallel.ForEach 方法。第一个不能真正检查成功。第二个做了很多额外的工作。

我的片段在这里:

public static class Program
{
    public static void Main(string[] args)
    {

        //FirstTry().Wait();

        SecondTry().Wait();
    }

    public static async Task FirstTry()
    {
        var variants = Enumerable.Range(1, 20).ToList();

        // first try
        var tasks = variants.ConvertAll(async v => await LongProcedureTrueIfSuccess(v));

        var completed = await Task.WhenAny(tasks);

        var result = (await completed) ? "Good" : "Bad";

        Console.WriteLine("Result is " + result);
    }

    public static async Task SecondTry()
    {
        var variants = Enumerable.Range(1, 20).ToList();

        CancellationTokenSource cts = new CancellationTokenSource();
        ConcurrentBag<bool> …
Run Code Online (Sandbox Code Playgroud)

.net c# parallel-processing task

1
推荐指数
1
解决办法
785
查看次数

标签 统计

.net ×1

c# ×1

parallel-processing ×1

task ×1