Che*_*hen 4 .net c# undocumented-behavior async-await
从下面的测试我们可以看到框架的当前版本保证输出顺序与输入任务相同.
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"
Run Code Online (Sandbox Code Playgroud)
但是从文档中我找不到任何有关此行为的信息,这意味着它不是文档保证.从这个问题的答案的意见
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");
}
Run Code Online (Sandbox Code Playgroud)
Q2 :(可能基于主要意见)根据无证件行为进行编码真的是不好的做法,即使某些行为几乎没有可能被改变吗?有时您需要添加大量代码以避免未记录的行为.
| 归档时间: |
|
| 查看次数: |
1054 次 |
| 最近记录: |