UDP 리스너 윈도우 응용 프로그램에서 UDP 메시지가 응용 프로그램에 도달하면이 udp 메시지와 관련된 루틴을 수행하는 새로운 전용 스레드를 만듭니다.자식 스레드에서 실행이 보류 되어도 루틴을 비동기 적으로 실행 하시겠습니까?
이 루틴은 비동기 적으로 호출됩니다.
왜 비동기입니까?
주로 비동기 호출이 스레드 풀에 대기하므로 (각 스레드가 동기화를 실행하게하는 경우가 아니라) 순서가 유지되도록해야합니다.
내 질문 :이 자식 스레드에서 비동기 적으로도이 루틴 실행 루틴을 실행하는 것이 좋습니다
- 인가?
- 예인 경우이 비동기 호출에 대해 IsBusy를 가장 잘 구현해야합니다. 심지어 화재 및 잊어 버린 패턴일까요?
나는 내가
내 나쁜 영어
감사에 대한 사과 달성 싶어 무엇을 잘 explianing하고 희망
xPridex
NB : 내가 많이 삭제가이없는 정확한 코드 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