AZURE:在workerrole中异步运行Run()
我有一个异步任务。
async Task UploadFiles() { }
我想在azure workerrole的Run()方法中对UploadFiles()调用’await’。 但’await’仅适用于声明为异步的方法。 所以我可以像下面那样使Run()方法异步:
public override void Run() { UploadFiles(); }
至
public async override void Run() { await UploadFiles(); }
工作者角色只有一个同步入口点。 这意味着您需要保持Run
方法运行的线程处于活动状态。
您可以在UploadFiles
为您提供的任务上调用Wait
。 通常会避免等待,但你不得不在这里做。 成本不是那么高:浪费了一个线程。
正如@usr所提到的,worker角色的入口点只能同步运行,所以你需要等待你开始的任何任务。 但通常情况下,我发现我通常有多个任务要从工作角色异步启动。 我遵循的标准模式是这样的
public override void Run() { var tasks = new List(); tasks.Add(RunTask1Async()); tasks.Add(RunTask2Async()); tasks.Add(RunTask3Async()); Task.WaitAll(tasks.ToArray()); }