C# 在引入一个简单的wait时,如何避免异步方法的激增?
比如说,我有一个方法将一些数据写入一个文件C# 在引入一个简单的wait时,如何避免异步方法的激增?,c#,async-await,C#,Async Await,比如说,我有一个方法将一些数据写入一个文件 public void Foo() { using (var file = File.OpenWrite(@"C:\Temp\foo.txt")) { var writer = new StreamWriter(file); writer.WriteLine("foo"); // some other code } } 这引入了少量的滞后。我决定使用异步IO来修复它。我将我的方法
public void Foo()
{
using (var file = File.OpenWrite(@"C:\Temp\foo.txt"))
{
var writer = new StreamWriter(file);
writer.WriteLine("foo");
// some other code
}
}
这引入了少量的滞后。我决定使用异步IO来修复它。我将我的方法更改为以下内容:
public async Task FooAsync()
{
using (var file = File.OpenWrite(@"C:\Temp\foo.txt"))
{
var writer = new StreamWriter(file);
await writer.WriteLineAsync("foo");
// some other code
}
}
由于async void
被认为是邪恶的,因此我将返回类型更改为Task
现在在调用方法中,我有一个未等待的任务
,这很糟糕。因此,我也将该方法的签名更改为异步任务
。该方法的父级也是如此。然后该方法是接口的一部分,该接口应该返回void
,因此我将接口中的方法更改为返回Task
。但是还有另一个实现,现在还需要返回Task
。我解决了这个问题,增加了一些调用方法,等等
现在最后有20个async
方法和2个小时的时间,所有这些都是因为我想做一个简单的异步文件编写
我应该如何避免这种情况?我是否应该在某个时刻不等待返回的任务
?还是我真的需要经历这一切
这引入了少量的滞后。我决定使用异步IO来修复它
异步IO通常不会使代码更快,它会使代码消耗更少的资源(特别是线程和内存)
如果您想使代码更具可伸缩性,或者不想阻止UI线程,async
将帮助您。如果你想让你的代码更快,async
可能根本帮不了你
这引入了少量的滞后。我决定使用异步IO来修复它
异步IO通常不会使代码更快,它会使代码消耗更少的资源(特别是线程和内存)
如果您想使代码更具可伸缩性,或者不想阻止UI线程,
async
将帮助您。如果你想让你的代码更快,async
可能根本帮不上你的忙。这条指导原则规定了-async。但是,如果您不这样做,您的方法将简单地返回,而调用方将不知道工作何时完成,这可能是一个致命的错误。要么您需要同步地等待结果(这会给您带来“滞后”),要么您需要一直使用async。“一个简单的等待”表明,当你使用异步代码时,你并不知道会发生什么:)看看在await
出现之前,同样的事情是如何解决的,你会惊奇地发现把所有调用者都改成async
是多么容易。你找到了不使用async的主要原因。当您从使用它中获得切实的好处时使用它。该指南始终声明-async。但是,如果您不这样做,您的方法将简单地返回,而调用方将不知道工作何时完成,这可能是一个致命的错误。要么您需要同步地等待结果(这会给您带来“滞后”),要么您需要一直使用async。“一个简单的等待”表明,当你使用异步代码时,你并不知道会发生什么:)看看在await
出现之前,同样的事情是如何解决的,你会惊奇地发现把所有调用者都改成async
是多么容易。你找到了不使用async的主要原因。当您从使用中获得有形利益时使用。