我的代码是异步api调用,看起来像下面的示例
public async Task<IEnumerable<TaskObject>> GetTaskObjects()
{
var tasks = new List<Task<TaskObject>>();
var shizzle = Task.Run(() => { Thread.Sleep(2000); return new TaskObject("1"); });
var shizzle2 = Task.Run(() => { Thread.Sleep(1000); return new TaskObject("2"); });
tasks.Add(shizzle.ContinueWith(part1 => { Thread.Sleep(1000); return part1.Result; }));
tasks.Add(shizzle2.ContinueWith(part1 => { Thread.Sleep(1000); return part1.Result; }));
await Task.WhenAll(tasks);
return tasks.Select(x => x.Result).ToList();
}
控制器是无状态服务光纤Web Api,可以调用有状态服务。这是一个好的解决方案吗?有没有?如果是api调用,是否还需要async和await关键字?
答案 0 :(得分:2)
public async Task<IEnumerable<TaskObject>> GetTaskObjects2()
{
var tasks = new List<Task<TaskObject>>();
var shizzle = Task.Run(() => { Thread.Sleep(2000); return new TaskObject("1"); });
var shizzle2 = Task.Run(() => { Thread.Sleep(1000); return new TaskObject("2"); });
//Add your task to the collection
tasks.Add(shizzle);
tasks.Add(shizzle2);
//wait for when all task are finished and it will return the data.
return await Task.WhenAll(tasks);
}
如果这行代码确实可以等待
/// At this point, all two tasks are running at the same time.
var shizzle = DoShizzleAsync();
var shizzle2 = DoShizzle2Async();
await Task.WhenAll(shizzle2, shizzle);
有关详细信息,请参阅Stephen Cleary blog