メソッドの同期バージョンと非同期バージョンの両方を維持するためのベスト プラクティスは何ですか?
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;
}
しかし、私はこの解決策について確信が持てません。この問題に関するベストプラクティスはありますか?