C# 立即按照请求的顺序处理异步结果
假设我启动了5个异步任务,并希望按照请求的顺序打印结果:C# 立即按照请求的顺序处理异步结果,c#,asynchronous,C#,Asynchronous,假设我启动了5个异步任务,并希望按照请求的顺序打印结果: public async void RunTasks() { var tasks = new List<Task<int>>(); for(int i=1; i<=5; i++) { tasks.Add(DoSomething(i)); } var results = await Task.WhenAll(tasks); Console.Wr
public async void RunTasks()
{
var tasks = new List<Task<int>>();
for(int i=1; i<=5; i++)
{
tasks.Add(DoSomething(i));
}
var results = await Task.WhenAll(tasks);
Console.WriteLine(String.Join(',', results));
}
public async Task<int> DoSomething(int taskNumber)
{
var random = new Random();
await Task.Delay(random.Next(5000));
return taskNumber;
}
(无需担心这样做的实际原因,将其视为一个有趣的问题)尝试a它将按照默认接收的顺序逐个输出它处理的项目,即使元素是并行处理的
public async Task Order()
{
var tBlock = new TransformBlock<int, string>(async x =>
{
await Task.Delay(100);
return x.ToString();
}, new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 10 });
var sub = tBlock.AsObservable().Subscribe(x => Console.Write(x));
foreach (var num in Enumerable.Range(0, 10))
{
tBlock.Post(num);
}
tBlock.Complete();
await tBlock.Completion;
sub.Dispose();
}
Try a它将按照默认接收的顺序逐个输出它处理的项目,即使元素是并行处理的
public async Task Order()
{
var tBlock = new TransformBlock<int, string>(async x =>
{
await Task.Delay(100);
return x.ToString();
}, new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 10 });
var sub = tBlock.AsObservable().Subscribe(x => Console.Write(x));
foreach (var num in Enumerable.Range(0, 10))
{
tBlock.Post(num);
}
tBlock.Complete();
await tBlock.Completion;
sub.Dispose();
}
var tasks=newlist();
对于(int i=1;ivar tasks=new List();
对于(inti=1;这看起来很像,但这个问题很混乱。答案可能会有帮助:)。这看起来很像,但这个问题很混乱。答案可能会有帮助:)。
0123456789
var tasks = new List<Task<int>>();
for(int i=1; i<=5; i++)
{
tasks.Add(DoSomething(i));
}
foreach (var task in tasks)
{
var result = await task;
Console.WriteLine(result);
}