我使用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;
}
我认为这与异步操作有关,但我无法弄清楚一个可行的模式。任何帮助将不胜感激。
答案 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");