C# 为什么Task.Factory.FromAsync被阻塞
我有一个方法:C# 为什么Task.Factory.FromAsync被阻塞,c#,async-await,C#,Async Await,我有一个方法: public async Task SendAsync() { var tasks = new List<Task<Response>>(); foreach (var i in new int[]{ 1,2,3,4,5,6,7,8,9,10 }) { var request = new Request(i);
public async Task SendAsync()
{
var tasks = new List<Task<Response>>();
foreach (var i in new int[]{ 1,2,3,4,5,6,7,8,9,10 })
{
var request = new Request(i);
var task = Task.Factory.FromAsync<Response>((callback, state) =>
{
var request = (Request)state;
var iar = request.BeginSend();
//callback(iar); - no difference?
return iar;
},
(asyncResult) =>
{
return EndSend(asyncResult);
}
, request);
tasks.Add(task);
}
var responses = await Task.WhenAll(tasks);
}
公共异步任务SendAsync()
{
var tasks=新列表();
foreach(新int[]{1,2,3,4,5,6,7,8,9,10}中的变量i)
{
var请求=新请求(i);
var task=task.Factory.fromsync((回调,状态)=>
{
var请求=(请求)状态;
var iar=request.BeginSend();
//回调(iar);-没有区别?
返回iar;
},
(异步结果)=>
{
返回EndSend(异步结果);
}
,请求);
任务。添加(任务);
}
var responses=等待任务。WhenAll(任务);
}
request.BeginSend需要10-20ms。(发送请求)
EndSend需要100-1000毫秒。(等待回应)
var responses=等待任务。当所有(任务)需要0毫秒时
每个FromAsync都会被逐个命中:
1->BeginSend
1->结束发送
2->BeginSend
2->结束发送
等等
等待就是等待。
那么,为什么FromAsync会等待EndSend的结果呢
我预期的结果将是:
1->BeginSend
2->BeginSend
10->BeginSend
1->结束发送
2->结束发送
10->结束发送
我遗漏了什么?我尝试复制您的场景,但看到操作异步启动。检查这把小提琴-。请发布
Request
类和EndSend
方法的代码,以详细说明场景。WhenAll()
是否棘手?能否显示Request
的实现?