4
次のテストから、フレームワークの現在のバージョンでは出力順序が入力タスクと同じであることが保証されています。Task.Whenの結果は保証されていますか?
the documentationsからしかしasync Task<string> GetString1()
{
await Task.Delay(2000);
return "1";
}
async Task<string> GetString2()
{
await Task.Delay(1000);
return "2";
}
var results = await Task.WhenAll(GetString1(), GetString2());
//now we have results[0] == "1" results[1] == "2"
私はそれを保証する文書化していないことを意味する、この動作については何も見つけることができません。 answers in this question
Q1: "注文フラグ"を出力する必要がありますか?以下にサンプルコードを変更します。
class OrderTaskResult<T>
{
public OrderTaskResult(int order, T value)
{
this.Order = order;
this.Value = value;
}
public int Order { get; private set; }
public T Value { get; private set; }
}
async Task<OrderTaskResult<string>> GetString1()
{
await Task.Delay(2000);
return new OrderTaskResult<string>(1, "1");
}
Q2:(ベース多分主な意見)は文書化されていない行動に応じて、コードにそれは本当に悪い習慣です、さらにいくつかの行動を変更することがほとんどない可能性がありますか?時々、文書化されていない振る舞いを避けるために、たくさんのコードを追加する必要があります。