【发布时间】:2014-09-27 06:30:29
【问题描述】:
我可以在 .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 的第二个选项。
【问题讨论】:
-
你的函数应该返回一个
Task<List<MyDataObject>>,但你返回一个List<MyDataObject>。在不知道Tasks 的情况下,这对我来说似乎是一个编译时问题。 -
另外,
so far I have not been successful是什么意思?什么不工作?请告诉我们具体情况。 -
最好使用async/await。但如果没有这个选项,试试这个:Creating a completed task