您好,我試圖有條件地返回一個異步方法任務。以下是我嘗試的方式。異步任務如何有條件地返回
public string DoMessage(MyObj obj)
{
string returnStatus = "Processing...";
var storageAccount = CloudStorageAccount.DevelopmentStorageAccount;
var queueClient = storageAccount.CreateCloudQueueClient();
var queue = queueClient.GetQueueReference(ConfigurationManager.AppSettings["QueueName"]);
if (queue.CreateIfNotExists()) {
}
var msg = CloudQueueMessageExtensions.Serialize(obj);
queue.AddMessage(msg);
//Task processTask = RunMessageProces();
var t = Task.Run(() => RunMessageProces());
t.Wait();
return returnStatus;
}
private async Task<string> RunMessageProces()
{
statusProcess = "Your message successfully inserted in process queue.";
await Task.Run(() => {
lock (_oQueue)
{
if (flagProcessing == true) //return when queue processing alredy started
{
return statusProcess; //Error ..??? how to return
}
flagProcessing = true; //else start processing the queue till there are messages.
}
});
statusProcess = ProcessMyMessage();
return statusProcess;
}
private string ProcessMyMessage() {...}
我失蹤了什麼?如何在有條件地返回字符串之間的異步方法裏面也存在等待鎖匿名塊(?)。我在任務中進行異步操作,因爲由於服務的暴露部分,「消息」同時充斥着大量呼叫。
Hy,請問您能舉一個最小的跑步例子,我們可以試試嗎? –
這裏它公共字符串DoMessage(){var t = Task.Run(()=> RunMessageProces());} 私人異步任務 RunMessageProces()//異步任務 {statusProcess =「MSG」。 ;等待Task.Run(()=> {//第一個錯誤在這裏...... lock(_oQueue){if(flagProcessing == true){return statusProcess; // SECOND ERROR HERE。 } flagProcessing = true; // else開始處理隊列直到有消息。 }}); statusProcess = BigTimeConsumingProcess();返回statusProcess;} –
AKS