使用lambda表达式而不是异步版本的Write方法



所以我一直在EDX上用C#做异步编程模块。任务是使方法WriteText异步。

我将方法的定义更改为private async,然后我得到了关于在方法中使用await关键字使其异步的提示。

我是这样做的:

using (FileStream sourceStream = new FileStream(filePath,
FileMode.Append, FileAccess.Write, FileShare.None,
bufferSize: 4096, useAsync: true))
{
await sourceStream.WriteAsync(encodedText, 0, encodedText.Length);
};

然而,我也使用lambda表达式进行了这种操作,并且不再有提示。

Task task1 = Task.Run(() =>
{
using (FileStream sourceStream = new FileStream(filePath,
FileMode.Append, FileAccess.Write, FileShare.None,
bufferSize: 4096))
{
sourceStream.Write(encodedText, 0, encodedText.Length);
};
});
await task1;

我知道第一种方式是合适的,但我的问题是,第二种方式是否也好?它是否使方法异步?我相信你的回答将帮助我澄清异步编程的概念。

不,第二种方式通常被称为"伪异步",更倾向于采用第一种方式。

如果调用者想在后台线程上运行您的函数,请让他们在Task.Run中调用您的函数。不要为他们封装Task.Run

相关内容

  • 没有找到相关文章

最新更新