:
ここで要求されるように可視化のためのいくつかの小さな例です。
しかし、ここであなたが行く:
public void BlockingCallWithTimeout()
{
Semaphore waitHandle = new Semaphore(0,1);
Thread thread = new Thread(this.Wrapper);
Timer timer = new Timer(state =>
{
thread.Abort();
waitHandle.Release();
},null,5000,0);
thread.Start(waitHandle);
waitHandle.WaitOne(); //wait until completion or until timeout
timer.Dispose();
}
public void Wrapper(object state)
{
Semaphore semaphore = (Semaphore)state;
//Call DLL Method
semaphore.Release();
}
あなたは(それを試していなかった)どこかのコードでThreadAbortExceptionのを処理する必要があります。このコードは単なる例です!タイムアウトと成功が同時に発生するケースを処理する必要があります。タイマーは実行中に処分されません。また、より多くの競争状態が発生する可能性があります。
'ThreadAbortException'? [mcve]を入力してください。 – dymanoid
['CancellationTokenSource'](https://msdn.microsoft.com/en-us/library/system.threading.cancellationtokensource(v = vs.110).aspx)の詳細を参照してください。 – Shreevardhan
CancellationTokenSourceがメソッドを1行で停止していると主張していますか? – humudu