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的主要原因。当您从使用中获得有形利益时使用。