维护该方法的同步和异步版本的最佳实践是什么?
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<ImportData> 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;
}
但我不确定这个解决方案。有没有关于这个问题的最佳实践?