AZURE: async Run() in workerrole

本文关键字:in workerrole Run async AZURE | 更新日期: 2023-09-27 17:59:20

我有一个异步任务。

async Task UploadFiles()
{
}

我想在azure workerrole的Run()方法中对UploadFiles()调用'await'。但是"await"仅适用于声明为async的方法。所以我可以让Run()方法异步吗?如下所示:

public override void Run()
{
   UploadFiles();
}

public async override void Run()
{
   await UploadFiles();
}

AZURE: async Run() in workerrole

Worker角色只有一个同步入口点。这意味着您需要保持Run方法运行的线程处于活动状态。

您可以在UploadFiles给您的任务上调用Wait。等待通常是避免的,但你不得不在这里等待。成本并没有那么高:浪费了一个线程。

正如@usr所提到的,辅助角色的入口点只同步运行,因此您需要等待启动的任何任务。然而,通常情况下,我发现我通常有不止一项任务要从工作者角色异步启动。我遵循的标准模式是这个

public override void Run()
{
    var tasks = new List<Task>();
    tasks.Add(RunTask1Async());
    tasks.Add(RunTask2Async());
    tasks.Add(RunTask3Async());
    Task.WaitAll(tasks.ToArray());
}