다른 스레드에서 완료하고 다시 시작하는 데 2 초 이상 걸리는 경우 메서드 실행을 취소해야한다는 요구 사항이 있습니다.메서드 실행 시간을 계산하는 방법은 무엇입니까?
그래서 어떤 방법이든/콜백 메커니즘/해킹이 있나, 메소드가 2 초 제한 시간을 넘었다는 것을 알릴 수 있습니까?
다른 스레드에서 완료하고 다시 시작하는 데 2 초 이상 걸리는 경우 메서드 실행을 취소해야한다는 요구 사항이 있습니다.메서드 실행 시간을 계산하는 방법은 무엇입니까?
그래서 어떤 방법이든/콜백 메커니즘/해킹이 있나, 메소드가 2 초 제한 시간을 넘었다는 것을 알릴 수 있습니까?
check if network drive exists with timeout in c#
https://web.archive.org/web/20140222210133/http://kossovsky.net/index.php/2009/07/csharp-how-to-limit-method-execution-time
비동기 패턴 :
public static T SafeLimex<T>(Func<T> F, int Timeout, out bool Completed)
{
var iar = F.BeginInvoke(null, new object());
if (iar.AsyncWaitHandle.WaitOne(Timeout))
{
Completed = true;
return F.EndInvoke(iar);
}
F.EndInvoke(iar); //not calling EndInvoke will result in a memory leak
Completed = false;
return default(T);
}
2 초에 System.Threading.Timer를 만들고 다른 스레드에서 메서드를 실행하고 콜백을 기다려야합니다. 타이머가 실행되기 전에 메서드가 완료되면 타이머를 처리해야합니다. 그렇지 않으면 메서드가있는 스레드를 중단해야합니다. 실행 중입니다. 이것은 당신이 당신이 그것을 찾을 수 있다면 그것은 좋은 것입니다 귀하의 방법
+1 그게 합리적인 소리, 감사합니다 –
이것은 완벽하게 내 요구 사항에 맞게, 감사합니다! – fjdumont
를 실행 스레드를 중단해야 BreakFunction에서 예를
using (new Timer(BreakFunction, true, TimeSpan.FromMinutes(2), Timeout.Infinite))
{
//TODO:here you should create another thread that will run your method
}
꽤 간단합니다. 나도 그걸 찾고 있었어.
보통 내가하는 일은이 방법을 다른 Thread
에서 시작하고 Timer
을이 경우 2 초로 시작하십시오. 는 이벤트를 발생 처음, 그냥 수행
if (a.IsAlive)
{
a.Abort();
}
두 가지 중요한 일 :
이Abort()
를 호출 할 때 타이머Thread
, 그것은 제기를 ThreadAbortException이므로 올바르게 처리해야합니다.
왜 당신이 처음부터 다른 스레드에서 시작하지? –
솔직히 묻고있는 일을 정확하게 수행하는 방법이 없다고 생각합니다. 그 곳 곳곳에 고리가 있어야합니다. 호출 스레드에서 먼저 메서드를 호출하면 어떻게해야합니까? – Ani