C# 我是否应该加上一个“;异步;要一个简短的方法还是不?
技术上有更好的解释,但对于初学者来说,经验法则应该是: 在以下情况下使用异步C# 我是否应该加上一个“;异步;要一个简短的方法还是不?,c#,.net,asynchronous,async-await,C#,.net,Asynchronous,Async Await,技术上有更好的解释,但对于初学者来说,经验法则应该是: 在以下情况下使用异步 库为您提供了一个异步选项,然后通常它会做一些从异步中获益匪浅的事情(HttpClient、StreamReader等) 如果因为1。必须在某个地方使用异步,然后必须一直使用异步,因为调用异步方法的每个更高级别的方法现在本质上也是异步的 如果1。二,。不要应用,否则不要将方法转换为异步 方法的长度与此无关,实际上方法越小越好,因为它是良好编码实践的标志 async/await的额外成本,即使它几乎覆盖了您的代码,通常也会
async
的形式开始编写任何方法。在需要插入wait
时,我将添加async
。但是在您的示例中,您的方法只是return-await
,我认为您不需要那里的await
(如果方法不是async
)。
async void Main()
{
var cp=new ConentProxy();
Console.WriteLine(await cp.GetAsync());
Console.ReadLine();
}
// Define other methods and classes here
public class HttpsContentProvider : IContentProvider
{
private static HttpClient hc=new HttpClient();
//**@No.1**
public async Task<string> GetAsync() {
return await hc.GetStringAsync("https://www.stackoverflow.com").ConfigureAwait(false);
}
}
public class DefaultContentProvider : IContentProvider
{
//**@No.2**
public async Task<string> GetAsync()
{
return await Task.FromResult("Default").ConfigureAwait(false);
}
}
public interface IContentProvider
{
Task<string> GetAsync();
}
public class ConentProxy : IContentProvider
{
public static int conentType = int.Parse(ConfigurationManager.AppSettings["UseHttps"] ?? "0");
//**@No.3**
public async Task<string> GetAsync()
{
switch (conentType)
{
case 0:return await new HttpsContentProvider().GetAsync();
default:return await new DefaultContentProvider().GetAsync();
}
}
}
public Task<byte[]> ReadAsByteArrayAsync()
{
this.CheckDisposed();
TaskCompletionSource<byte[]> tcs = new TaskCompletionSource<byte[]>();
this.LoadIntoBufferAsync().ContinueWithStandard((Action<Task>) (task =>
{
if (HttpUtilities.HandleFaultsAndCancelation<byte[]>(task, tcs))
return;
tcs.TrySetResult(this.bufferedContent.ToArray());
}));
return tcs.Task;
}