몇 초 동안 완료해야하는 몇 가지 작업을 동 기적으로 수행하는 방법이 필요하지만 몇 분 정도 걸릴 수 있습니다. 시간이 지나면 결과에 신경 쓰지 않습니다. 여기에 내가 컴파일러가 생성 delegate.BeginInvoke 사용하여 지금 그것을하고있어입니다 :동기 동작에 대한 더 나은 시간 초과 감지
static void Main()
{
bool disposed = false;
var wait = new ManualResetEvent(false);
var a = new Action(
() =>
{
Thread.Sleep(1000); // <- some looong action
if (!disposed)
lock (wait)
if (!disposed)
wait.Set();
});
a.BeginInvoke(a.EndInvoke, null);
bool success = wait.WaitOne(500);
Console.WriteLine(success ? "success" : "timeout");
lock (wait)
{
wait.Dispose();
disposed = true;
}
Console.ReadLine();
}
추한 보인다. 그리고 나는 람다 클로저의 disposed
변수가 수정되었다는 것을 알고 있습니다. (ReSharper와는 달리이 C# 기능을 좋아합니다). 내가 처분하고 싶기 때문에 모두 ManualResetEvent
. .NET4에서 더 나은 접근 방식을 제안 할 수 있습니까? 아마도 이벤트를 처리하지 않고 GC에 의존해야합니까?
주 : ManualResetEvent.Set()
은 처분 된 인스턴스에서 수행하려고하면 폭발합니다.
BeginInvoke 호출은 동기식이 아닌 비동기식 작업을 시작하는 방법입니다. – Task
맞긴하지만 타임 아웃 간격 내에서 동 기적으로 완료하고 싶습니다. – repka