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
的实现?