我正在尝试强制加载异步数据源,但是要同步等待它,以便它与遗留代码一起使用(使用.net4.0)。
如果我创建了几个任务,使用TaskCompletionSource超过1000并注释掉ContinueWhenAll,最终每个任务都按预期异步完成。但是当我介绍ContinueWhenAll时,我只能在一个任务上设置TaskCompletionSource。
是否可以等待所有TaskCompletionSource设置然后从LoadAllRows方法中转义?
任何帮助将不胜感激,
干杯
public void LoadAllRows()
{
var allLoaded = false;
var tasks = new List<Task<bool>>();
for (var i = 0; i <= mDataRowCount; i++)
tasks.Add(EnsureRowLoaded(mDataController, i));
Task.Factory.ContinueWhenAll(tasks.ToArray(), (antecendents) =>
{
//Check all loaded here
}).Wait();
if (!allLoaded)
{
//Throw some exception
}
}
private Task<bool> EnsureRowLoaded(AsyncServerModeDataController dataController, int rowHandle)
{
var tcs = new TaskCompletionSource<bool>();
//Async method with callback setting the tcs result
dataController.EnsureRowLoaded(rowHandle, o => tcs.SetResult(true));
return tcs.Task;
}