私は、現在同期しているasync/awaitにかなり大きなコードをASP.NETで移行しようとしています。私が見てきたほとんどの勧告は、スタック全体をマイグレーションすると言います。基本的にすべての変更を一度に行うことができるショットガンのアプローチです。ASP.NETコードの同期から非同期/待機への部分的な移行
危険を減らすために、コードの変更の範囲を一度に制限したいと思いますが、コードの重複を避けるために同期メソッドから非同期コードを呼び出す必要があります。
私はいくつかの検索を行い、このタイプの非同期コードのラッピングを可能にするAsyncContext.Runメソッドを持つStephen ClearyのNito.AsyncEx NuGetパッケージを見つけました。
以下は、移行を実行する方法のサンプルです。レガシーコードはGetContentを呼び出します。これは同期型で、GetContentAsyncメソッドの単なるラッパーです。これにより、同期メソッドを従来のコードから呼び出す柔軟性が得られます。私は変更する準備はできていませんが、同時に私が選択した場所で非同期コードを使用できるようにします。
私の質問は、実行可能なアプローチのようですか?同期ラッパーメソッドに欠点や潜在的なパフォーマンス問題がありますか?大規模なコードベースを非同期に移行する際の課題は、他の人たちがどのように取り組んできましたか?
using Nito.AsyncEx;
using System.Net.Http;
using System.Threading.Tasks;
namespace AsyncMigration
{
public class ContentManager
{
public string GetContent(string url)
{
return AsyncContext.Run(() => GetContentAsync(url));
}
public async Task<string> GetContentAsync(string url)
{
HttpClient client = new HttpClient();
return await client.GetStringAsync(url);
}
}
}