我正在使用UDP偵聽器Windows應用程序,一旦UDP消息到達應用程序,我創建了一個新的專用線程,它執行與此udp消息相關的例程。即使在子線程中執行執行也會異步運行例程?
這個例程被稱爲異步。
爲什麼是異步?
主要是爲了保持UDP到達的順序,因爲異步調用在線程池中排隊(而不是如果我讓每個線程運行同步)。
我的問題:
- 是它的一個子線程異步運行的程序,即使這個程序運行是一個好主意?
- 如果是的話,我應該實施IsBusy這個異步調用的最佳實踐,即使它是一個失火和遺忘模式?
我希望我explianing以及什麼我想要實現
道歉我的英文不好
問候
xPridex
注意:這不是正確的代碼,我刪除很多有關lisibity的細節。
/// <summary>
/// Launch SendNotificationToEBSECW treatment.
/// </summary>
/// <param name="sender">object : UDPmsg_t_Mapping</param>
private void StartPrepared(object sender)
{
mainThread = new Thread(new ParameterizedThreadStart(EntryPointV3));
mainThread.Start(sender);
}
private readonly object _sync = new object();
private bool _myTaskIsRunning = false;
public bool IsBusy
{
get { return _myTaskIsRunning; }
}
public void DoWorkAsynch(Tuple.Create(x,y))
{
MyTaskWorkerDelegate worker = new MyTaskWorkerDelegate(EntryPointV3);
AsyncCallback completedCallback = new AsyncCallback(MyTaskCompletedCallback);
lock (_sync)
{
if (_myTaskIsRunning)
throw new InvalidOperationException("currently busy.");
AsyncOperation async = AsyncOperationManager.CreateOperation(null);
worker.BeginInvoke(Tuple.Create(x,y), completedCallback, async);
_myTaskIsRunning = true;
}
}
private void MyTaskCompletedCallback(IAsyncResult ar)
{
// get the original worker delegate and the AsyncOperation instance
MyTaskWorkerDelegate worker =
(MyTaskWorkerDelegate)((AsyncResult)ar).AsyncDelegate;
AsyncOperation async = (AsyncOperation)ar.AsyncState;
// finish the asynchronous operation
worker.EndInvoke(ar);
// clear the running task flag
lock (_sync)
{
_myTaskIsRunning = false;
}
// raise the completed event
AsyncCompletedEventArgs completedArgs = new AsyncCompletedEventArgs(null,
false, null);
async.PostOperationCompleted(
delegate(object e) { OnMyTaskCompleted((AsyncCompletedEventArgs)e); },
completedArgs);
}
public event AsyncCompletedEventHandler MyTaskCompleted;
protected virtual void OnMyTaskCompleted(AsyncCompletedEventArgs e)
{
if (MyTaskCompleted != null)
MyTaskCompleted(this, e);
}
請向我們展示如何「創建一個新的專用線程」以及如何「呼叫」它。 –
我只是更新帖子來添加代碼。 – xPridex