저는 멀티 스레딩을 처음 접했고 개념 증명을 해왔으며 (VS2008) 스레드 창도 발견했습니다 : (VS2008) 스레드 창을 실제로 실행하는 중
내 질문은 : 실행중인 스레드를 코드에 "링크"하려면 어떻게합니까? 예를 들어 스레드 ID (예 : 스레드 창에 표시됨)를 사용하면 어떻게 기록 할 수 있습니까? 또는 인 경우 BeginInvoke() 메서드는 내가 설정 한 'id'인수 (문자열)를 사용합니다 (아래 예제에서 "서비스 A"로 표시). 그러나 스레드 창에서 볼 수 없습니다.
관심 날 것은 내가 실행하여 AsyncCallbacks 및 BeginInvoke (의 세 병렬 스레드까지 비화하고 있습니다)하지만 난 단지 내가 볼해야한다고 생각 지점에서 스레드 창에 두 개의 작업자 스레드를 볼 수 있다는 것입니다 세. 실제로 나는 할 수 있다고 생각한다. 'Name'이 세 작업자 스레드 인 <No Name>
.
// Creating the call back and setting the call back delegate
AsyncCallback callBackA = new AsyncCallback(AsyncOperationACompleted);
// callBackB ...
// callBackC ...
// Create instances of the delegate, which calls the method we want to execute
callerA = new DumbEndPoint.AsyncMethodCaller(DumbEndPoint.PretendWorkingServiceCall);
// callerB ...
// callerC ...
// sleep = thread sleep time in milliseconds
IAsyncResult resultA = callerA.BeginInvoke(sleep, "Service A", callBackA, null);
// resultB ...
// resultC ...
// I expect to see three threads in the Threads Window at this point.
그때 콜백 대리자 결과를 받고 있어요 :
private void AsyncOperationACompleted(IAsyncResult result)
{
try
{
string returnValue = callerA.EndInvoke(result);
mySmartDTO.ServiceDataA = returnValue;
}
catch (Exception ex)
{
// logging
...
}
}
그래 - 나는 비트를 해요 바보. 나는 그저 좀 더 놀아서 깨달았다. :) 한 가지는 Thread.CurrentThread.ManagedThreadId는 완전히 다른 id를 리턴한다. –
@Adrian K : 관리되지 않는 스레드 ID (스레드 창에 표시)에 대해서는 AppDomain.GetCurrentThreadId()를 참조하십시오. 그러나 관리되는 스레드 ID가 관리되지 않는 스레드 ID와 일대일이 아닌 시나리오가있을 수 있습니다. 이 방법을 사용하면 얻을 수있는 설명서 및 컴파일러 경고가 세부 사항을 조금 더 설명합니다. –