我正在使用异步等待方法,但无法获得下一个功能:
我有一个同步包装方法(MethodSync
),该方法调用异步方法(MethodA_Async
),然后做一些事情(MethodB
)。
此后,它进入一个循环,在该循环中,每个项目都会做一些事情(MethodC
),然后运行一个异步方法(MethodE_Async
),但要等待MethodA_Async
完成(这就是为什么我传递MethodA_Async
返回的任务:等待它完成的原因)。
最后,它执行其他操作(MethodD
),并等待所有MethodE_Async
完成。
问题在于它无法正常工作,并进入了无限的等待循环。
private async Task<bool> MethodA_Async()
{
bool finish = false;
await Task.Run(()=>
{
// Doing another things
finish = true;
});
return finish;
}
private void MethodB() { }
private void MethodC() { }
private void MethodD() { }
private async Task MethodE_Async (Task<bool> methodATask, int item)
{
await Task.Run(async() =>
{
// Waits for MethodA_Async to finish
bool finish = await methodATask;
// Other logic that works on item parameter.
var result = 2*item;
});
}
public bool MethodSync()
{
// Starts MethodA_Async
var taskMethodA = MethodA_Async();
// Doing other things that do not depend upon MethodA_Async
MethodB();
// Iterations
var tasksDependingOnMethodA = new List<Task>();
var items = new List<int>{ 1, 2, 3 };
foreach(var item in items)
{
// Doing other things that do not depend upon MethodA_Async
MethodC();
// MethodE_Async starts
tasksDependingOnMethodA.Add(MethodE_Async(taskMethodA, item));
}
// Other method that does not depend upon MethodA_Async
MethodD();
// Wait for all MethodE_Async methods to finish
Task.WhenAll(tasksDependingOnMethodA).GetAwaiter().GetResult();
return true;
}
如果您能给我任何指导,我将不胜感激。