C# 创建异步方法的正确方法
下面是生成异步方法的正确方法,其中方法中的代码必须执行多个需要等待的异步调用。 计划是启动多个此方法,并在代码继续之前等待所有方法完成C# 创建异步方法的正确方法,c#,asynchronous,C#,Asynchronous,下面是生成异步方法的正确方法,其中方法中的代码必须执行多个需要等待的异步调用。 计划是启动多个此方法,并在代码继续之前等待所有方法完成 public static Task<string> Get(string url) { return Task.Run(async () => { var client = getBaseHttpClient(); var result = awa
public static Task<string> Get(string url)
{
return Task.Run(async () =>
{
var client = getBaseHttpClient();
var result = await client.GetAsync(url).ConfigureAwait(false);
if (result.IsSuccessStatusCode)
{
return await result.Content.ReadAsStringAsync();
}
return null;
});
}
公共静态任务获取(字符串url)
{
返回任务。运行(异步()=>
{
var client=getBaseHttpClient();
var result=await client.GetAsync(url).ConfigureAwait(false);
if(结果。IsSuccessStatusCode)
{
返回wait result.Content.ReadAsStringAsync();
}
返回null;
});
}
您的代码:
Task.Run
)GetAsync
),然后返回线程池await
),将启动另一个线程池线程(ConfigureAwait(false)
)GetAsStringAsync
),并返回线程池wait
)时,将启动另一个线程池线程以将内容返回给调用方法getBaseHttpClient
的调用推迟到线程池线程,我假设这不是密集的CPU工作-在这种情况下,它可以/应该同步完成
public static async Task<string> Get(string url)
{
var client = getBaseHttpClient();
var result = await client.GetAsync(url).ConfigureAwait(false);
if (result.IsSuccessStatusCode)
{
return await result.Content.ReadAsStringAsync();
}
return null;
}
谢谢你的建议,很好的解释真的很有帮助。我很快就会接受答案,在我的第一篇帖子中,我还有一个问题要问你,你是否能帮我解决这个问题?@DoomStone我很高兴它能帮上忙。我不确定我是否理解你的第二个问题。。请发表一个单独的问题,更详细一点,我会看看我是否可以回答它那里。
var tasks = urls.Select(Get);
var responses = await Task.WhenAll(tasks);