为什么HttpClient PostAsJsonAsync退出Azure Web Job而不运行代码呢?

时间:2016-02-26 20:28:19

标签: azure asp.net-web-api azure-web-sites azure-webjobs azure-webjobssdk

我使用Azure SDK构建了Azure Web作业,其唯一的工作是调用Web服务(Web API),然后根据返回值(类)记录响应。问题是,只要它调用HttpClient PostAsJsonAsync方法来调用服务,它就会退出Web作业而不执行任何响应处理。我的代码是:

#include <stdio.h>

typedef char mytype;

int main(){

  const int rows = 10;
  const int cols = 10;

  mytype **hMat = new mytype*[rows];
  hMat[0] = new mytype[rows*cols];
  for (int i = 1; i < rows; i++) hMat[i] = hMat[i-1]+cols;

  //initialize "2D array"

  for (int i = 0; i < rows; i++)
    for (int j = 0; j < cols; j++)
      hMat[i][j] = 0;

  mytype *dArr;
  cudaMalloc(&dArr, rows*cols*sizeof(mytype));

  //copy to device
  cudaMemcpy(dArr, hMat[0], rows*cols*sizeof(mytype), cudaMemcpyHostToDevice);

  //kernel call


  //copy from device
  cudaMemcpy(hMat[0], dArr, rows*cols*sizeof(mytype), cudaMemcpyDeviceToHost);

  return 0;
}

来自门户网站的执行日志是: Execution Logs

我认为这与异步操作有关,但我无法弄清楚一个可行的模式。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

您必须将自己的异步方法的返回值定义为Task,而不是void

在相关说明中,您应该使用Async为您的方法名称添加后缀。这不会解决问题,但它表明你正在使用async / await模式。

答案 1 :(得分:0)

您的PostAsJsonAsync调用中可能存在异常。尝试尝试捕获它并记录错误:

try {
    var response = await client.PostAsJsonAsync("api/Reminder/ProcessDueReminders", new { ItemID = 1 });
} catch (Exception ex){
       Console.WriteLine("Exception: "+ ex);
}       
Console.WriteLine("After service");