所以我一直在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
。