我在azure网站上使用webjob来处理占用大量内存的繁重进程.该进程后端执行大量Web调用,因此将其设计为异步.我希望webjob只处理每个实例的一个请求.我已经设置了Queues.BatchSize = 1选项来禁用webjob中的并行.但是,当我使用await来调用异步方法时,下一条消息仍然会立即从队列中获取,因为await并没有真正阻止当前线程,这对UI应用程序很有用,但不适用于我的情况.
所以我尝试使用wait来阻止当前线程,直到所有后端进程完成.但是,在该过程完成后抛出异常.似乎webjob在等待后删除队列存在问题.
我附上了简化的测试代码和例外.有任何想法吗?
非常感谢您的帮助!
名称空间ProcessWebJob {
public class Functions
{
public static void ProcessQueueMessage([QueueTrigger("testQueue")] string message, TextWriter log)
{
try
{
testAsync ts = new testAsync();
var task = Task.Run(async () => { await ts.test(); });
task.Wait();
}catch(Exception e){
Trace.TraceInformation("error on processing the queue message" + e.InnerException);
}
}
}
public class testAsync {
public async Task<int> test()
{
await Task.Delay(10000); //10 seconds delay
return 1;
}
}
Run Code Online (Sandbox Code Playgroud)
}
[10/07/2015 17:57:14> 278796:错误]未处理的异常:Microsoft.WindowsAzure.Storage.StorageException:远程服务器返回错误:(404)Not Found.---> System.Net.WebException:远程服务器返回错误:(404)Not Found.[10/07/2015 17:57:14> 278796:ERR]在Microsoft.WindowsAzure.Storage.Shared.Protocol.HttpResponseParsers.ProcessExpectedStatusCodeNoException [T](HttpStatusCode …