Csharp/C#教程:保持同步和异步实现分享


保持同步和异步实现

维护方法的同步和异步版本的最佳实践是什么?

Let's suppose we have the following method: public ImportData Import(ZipFile zipFile) { ... //Step 1. Initialization var extractedZipContent = zipFile.Extract(); //Step 2 ... //Step 3. Some intermediate stuff var parsedData = ParseExtractedZipContent(extractedZipContent); //Step 4 ... //Step 5. Some code afterwards } 

第2步和第4步是长时间运行的,所以我们想在异步版本的Import方法中异步调用它们:

 public async Task ImportAsync(ZipFile zipFile) { ... //Step 1. Initialization var extractedZipContent = await zipFile.Extract(); //Step 2 ... //Step 3. Some intermediate stuff var parsedData = await ParseExtractedZipContentAsync(extractedZipContent); //Step 4 ... //Step 5. Some code afterwards } 

现在我们有同步和异步实现。 但我们也有代码重复。 我们怎样才能摆脱它呢?

我们可以提取步骤1,3和5并从两个实现中调用它们。 但是1.我们仍然重复方法调用的顺序2.它在实际代码上并不那么容易

我遇到的最好的想法是异步实现。 并且同步实现只是等待异步实现完成:

 public ImportData Import(ZipFile zipFile) { var importAsyncTask = ImportAsync(zipFile); importAsyncTask.Wait(); return importAsyncTask.Result; } 

但我不确定这个解决方案。 关于这个问题,有没有最好的实践?

我们怎样才能摆脱它呢?

你不能。

Stephen Toub有一些很好的博客文章,解释了异步方法的同步包装器和同步方法的异步包装器的缺陷。 简短的回答是:不要。

你最好的选择是现在保持两者。 几年后,同步方法可以被认为是过时的。

另见这个问题 。

上述就是C#学习教程:保持同步和异步实现分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/943067.html

(0)
上一篇 2021年11月13日
下一篇 2021年11月13日

精彩推荐