using System;
using System.Collections.Concurrent;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace FirstTask
{
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()
CancellationTokenSource cts = new CancellationTokenSource();
ConcurrentBag<bool> bag = new ConcurrentBag<bool>();
Parallel.ForEach(variants, (v,state) =>
var r = LongProcedureTrueIfSuccess(v).Result;
if (r)
bag.Add(r);
state.Stop();
});
var result = (bag.FirstOrDefault()) ? "Good" : "Bad";
public static async Task<bool> LongProcedureTrueIfSuccess(int i)
await Task.Delay(1000); //Processing
Console.WriteLine("We know result");
if (i == 5)
return true;
return false;