我可以在 .Net 4.5 中解决这个问题,但我必须在 .Net 4.0 中解决它,到目前为止我还没有成功。
我无法将回复发送到 Task<List<MyDataObject>>
.下面的代码可以创建List<MyDataObject>
.
public Task<List<MyDataObject>> Foo()
{
IEnumerable<string> names = GetList();
var tasks = new List<Task>();
foreach (var name in names)
{ tasks.Add(Task<MyDataObject>.Factory.StartNew(
() =>
{
var reply = new MyDataObject();
var workerObject = new WorkerObject();
workerObject.Foo2();
reply.Success = true;
return reply;
}));
}
Task.WaitAll(tasks.ToArray());
var replyList = new List<MyDataObject>();
for (int i = 0; i < tasks.Count(); i++)
{ replyList.Add(((Task<MyDataObject>)tasks[i]).Result);
}
return replyList;
}
WhenAll()
只有4.5
await
只有4.5
所以我不能接受那些
我同意这不会编译。我展示的是我可以遍历结果。但是我不知道怎么走
List<MyDataObject>()
到
Task<List<MyDataObject>>
感谢您的回复。我将接受 Yuval Itzchakov 的回答,因为它以简单的方式解决了我的问题。对于这个用例,我仅限于没有新的程序集。如果我有另一种方法需要此功能,我会选择 280Z28 的第二个选项。
最佳答案
使用 TaskCompletionSource<List<MyDataObject>>
Task.WaitAll(tasks.ToArray());
var replyList = new List<MyDataObject>();
for (int i = 0; i < tasks.Count(); i++)
{
replyList.Add(((Task<MyDataObject>)tasks[i]).Result);
}
var tcs = new TaskCompletionSource<List<MyDataObject>>();
tcs.SetResult(replyList);
return tcs.Task;
您还可以下载 Microsoft.Bcl.Async
得到
.NET 4.0 中的 NET 4.5 效果
关于c# - 创建一个返回 Task<List<MyDataObject>> foo() 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25124514/