【发布时间】:2014-02-27 10:05:56
【问题描述】:
我正在使用 Amazon SQS 上传图像文件。我有一个函数可以检查新的 SQS 消息并循环读取消息并运行函数
代码:
if (receiveMessageResponse.ReceiveMessageResult.Message.Count != 0)
{
for (int i = 0; i < receiveMessageResponse.ReceiveMessageResult.Message.Count; i++)
{
string messageBody = receiveMessageResponse.ReceiveMessageResult.Message[i].Body; // read as json text
dynamic dynResult = JObject.Parse(messageBody);
ImageServiceReference.statePackage sp = new ImageServiceReference.statePackage();
..... // some sp objevt initialization
Task.Factory.StartNew(() =>
{
SaveImageProcedure(sp);
});
}
}
在工作代码中,我在没有任务的情况下调用SaveImageProcedure(同步)。但现在我想让SaveImageProcedure 异步运行。
在那个函数 SaveImageProcedure 我有一个任务:
var task = Task<int>.Factory.FromAsync(proxy.BeginSaveImage(sp, new AsyncCallback(CompleteSave), state), proxy.EndSaveImage);
此任务调用异步处理长图像的 WCF 服务。
我的问题:
当我使用Task.Factory.StartNew 异步调用 SaveImageProcedure 时,WCF 不会处理图像,无论当我在没有Task.Factory.StartNew(只是函数名本身)的情况下运行它时,它运行良好并且我看到图像已处理。
我不明白为什么当我进行更改以异步运行 SaveImageProcedure 函数时,它会导致 WCF 无法像同步运行那样工作。
【问题讨论】:
标签: c# .net wcf asynchronous async-await