C# 如果满足条件,如何停止运行任务列表

C# 如果满足条件,如何停止运行任务列表,c#,task,C#,Task,我正在发出大量的客户端get请求,下面的代码工作正常,但如何在找到HttpResponseMessage of StatusCode.OK并返回单个任务后强制停止执行 public List<Task<HttpResponseMessage>> GetUploadURLAsync(List<string> list) { List<Task<HttpResponseMessage>> task

我正在发出大量的客户端get请求,下面的代码工作正常,但如何在找到HttpResponseMessage of StatusCode.OK并返回单个任务后强制停止执行

  public List<Task<HttpResponseMessage>> GetUploadURLAsync(List<string> list)
        {
            List<Task<HttpResponseMessage>> tasks = new List<Task<HttpResponseMessage>>();
            using (HttpClient client = new HttpClient())
            {
                for(int i = 0; i < list.Count; i++)
                {
                  <client get async code generating task list>
                }
                Task.WaitAll(tasks.ToArray());
            }
            return tasks;
    }
公共列表GetUploadURLAsync(列表列表) { 列表任务=新列表(); 使用(HttpClient=new HttpClient()) { for(int i=0;i类似这样的内容:

class SomeClass
{
    private static HttpClient _httpClient = new HttpClient();

    public static Task<HttpResponseMessage> GetFirstSuccessAsync(List<string> list)
    {
        var tasks = new List<Task<HttpResponseMessage>>();
        foreach (var url in list) {
            tasks.Add(_httpClient.GetAsync(url));
        }

        return WhenAnySuccess(tasks);
    }

    private static async Task<HttpResponseMessage> WhenAnySuccess(List<Task<HttpResponseMessage>> tasks)
    {
        while (tasks.Count > 0) {
            Task<HttpResponseMessage> task = await Task.WhenAny(tasks);
            if (task.Status == TaskStatus.RanToCompletion && task.Result.StatusCode == HttpStatusCode.OK) {
                return task.Result;
            }

            tasks.Remove(task);
        }

        return null;
    }
}

class Program
{
    static void Main(string[] args)
    {
        var response = SomeClass.GetFirstSuccess(new List<string> { "http://google.com", "http://microsoft.com" }).Result;
        Console.WriteLine(response.RequestMessage.RequestUri);
        Console.ReadKey();
    }
}
class-SomeClass
{
私有静态HttpClient _HttpClient=新HttpClient();
公共静态任务GetFirstSuccessAsync(列表)
{
var tasks=新列表();
foreach(列表中的变量url){
添加(_httpClient.GetAsync(url));
}
返回成功(任务);
}
私有静态异步任务成功(列出任务)
{
而(tasks.Count>0){
任务=等待任务。当有(任务);
if(task.Status==TaskStatus.RanToCompletion&&task.Result.StatusCode==HttpStatusCode.OK){
返回任务。结果;
}
任务。删除(任务);
}
返回null;
}
}
班级计划
{
静态void Main(字符串[]参数)
{
var response=SomeClass.GetFirstSuccess(新列表{”http://google.com", "http://microsoft.com“})结果;
WriteLine(response.RequestMessage.RequestUri);
Console.ReadKey();
}
}

这里提到了几个选项: