のラムダ式に非同期の使用を避けることができる方法aController.Get()の署名が私はASPコントローラをテストするために私の現在のユニットテストコードでContinueWith()
public IHttpActionResult Get()
である場合、私は
var resp = aController.Get();
string stringContent = await resp.ExecuteAsync(CancellationToken.None).Result.Content.ReadAsStringAsync();
を有します
今、私は私が私の上記のテストコードを変更
public async Task<IHttpActionResult> GetAsync()
に取得()の署名を変更する必要があります:
aController.GetAsync().ContinueWith(
async (t) =>
{
var actionResult = t.Result;
string stringContent = await actionResult.ExecuteAsync(CancellationToken.None).Result.Content.ReadAsStringAsync();
});
ContinueWith()の使用中にラムダ式でasync
を持っていることをお勧めしている場合私の質問はあります。
これを実行する別の方法は、私はそれがいずれかの非常に読みやすいではないと思います
string stringContent = await aController.Get().Result.ExecuteAsync(CancellationToken.None).Result.Content.ReadAsStringAsync();
です。これを行うより良い方法があるのだろうかと思います。あなたはまだいくつかの同期呼び出しを行いたい場合は、私はそれから捨てると言うでしょう
var result = await aController.GetAsync();
var result2 = await result.ExecuteAsync(CancellationToken.None);
string stringContent = await result2.Content.ReadAsStringAsync();
:
個人的には、待っている2番目のバージョンが読みやすくなります。 – Midas
これは実際に実行されますか?ブロッキングコールに気付く – Nkosi