我们有不同的长期程序,成功和不成功的结果。我们希望并行运行这些任务,并返回用户第一个成功的结果。停止其他任务也会很棒。
我试过 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)