我有個執行緒中,需要呼叫一個訊息發送,這個訊息如果沒發送成功就繼續下一條訊息會出現重復好幾條的情況,發送訊息函式我加了個Action引數,如果發送訊息后不管是否成功都會回呼這個action,以便外面能知道里面訊息已經發送了就不會出現重復訊息的出現,但是我在外面不知道怎么去執行
比如發送訊息是:
Instance.sendMsg(string msg,string userid,Action<bool>success = null);
外面我現在是直接呼叫
for(int i=0;i<10;i++)
{
Instance.sendMsg("你好",10086);
}
這種情況怎么寫才能根據action等待執行下一個Instance.sendMsg?
佇列嗎?佇列也沒辦法判斷是否發送成功了啊?
uj5u.com熱心網友回復:
用Task去執行,然后Task等待在哪邊,執行完了再給主執行緒發個通知,比如。
Task t=new Task(()=>{Instance.sendMsg("你好",10086); });
t.Start();
t.Wait();
this.Dispatcher.Invoke(()=> { MessageBox.Show("do next"); });
uj5u.com熱心網友回復:
sendMsg里面是一個WebSocket.SendAsync,額你這么寫的話,應該還是有問題的吧,Task的Wait能等到SendAsync的成功回呼?
uj5u.com熱心網友回復:
使用執行緒,加上狀態標識。根據標識操作即可。我一直這么用的。百分百可以。uj5u.com熱心網友回復:
用Task去執行,然后Task等待在哪邊,執行完了再給主執行緒發個通知,比如。sendMsg里面是一個WebSocket.SendAsync,額你這么寫的話,應該還是有問題的吧,Task的Wait能等到SendAsync的成功回呼?
uj5u.com熱心網友回復:
把完整代碼貼出來。
uj5u.com熱心網友回復:
ThreadPool執行緒池可以實作,等待上一步執行完回傳結果再執行下一步uj5u.com熱心網友回復:
你的執行緒執行完畢之后才執行這個 action,那么怎么判斷執行緒執行完畢了呢?使用 Task 可以實作這個需求,參見 Task.ContinueWith 方法。uj5u.com熱心網友回復:
用訊息佇列,每次發的時候只取訊息(peek),發送完成根據回呼結果,如果成功則dequeue,并繼續peek下一個,如果失敗則直接繼續peek。uj5u.com熱心網友回復:
//這個回傳值是什么,是void還是bool?
Instance.sendMsg(string msg,string userid,Action<bool>success = null);
這個方法是你自己寫的么,可以直接改造這個方法么,比如不使用Action,直接回傳Task<bool>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/9838.html
標籤:C#
上一篇:求一個演算法?
下一篇:哪個機構教python最好
