C Uygulamak# Genel Zaman Aşımı
Tek bir satır (veya anonim temsilci) kod zaman aşımı ile yürütmek için genel bir şekilde uygulanması için iyi fikirler arıyorum.
TemperamentalClass tc = new TemperamentalClass();
tc.DoSomething(); // normally runs in 30 sec. Want to error at 1 min
Zarif bir şekilde benim kod kaprisli kodu değiştiremem) ile etkileşime pek çok alanda uygulanabilir bir çözüm arıyorum.
Buna ek olarak, soruna neden olan "zaman aşımına uğradı" code mümkünse. daha yürütme durduruldu istiyorum
CEVAP
Gerçekten zor kısım burada iptal olabilir yere Eylemi geri vasi iplik geçip uzun süren görevi öldürmekti. Lambda oluşturulan bu yöntemi yerel bir değişken öldürmek iplik geçer sarılmış bir temsilci ile bunu başardım.
Ben bu örnek, zevk için gönderin. Gerçekten ilgilendiğiniz yöntemi CallWithTimeout.Bu iptal ve ThreadAbortException yutma ile uzun süren bir iş parçacığı iptal edecektir:
Kullanımı:
class Program
{
static void Main(string[] args)
{
//try the five second method with a 6 second timeout
CallWithTimeout(FiveSecondMethod, 6000);
//try the five second method with a 4 second timeout
//this will throw a timeout exception
CallWithTimeout(FiveSecondMethod, 4000);
}
static void FiveSecondMethod()
{
Thread.Sleep(5000);
}
Statik yöntem işi:
static void CallWithTimeout(Action action, int timeoutMilliseconds)
{
Thread threadToKill = null;
Action wrappedAction = () =>
{
threadToKill = Thread.CurrentThread;
action();
};
IAsyncResult result = wrappedAction.BeginInvoke(null, null);
if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds))
{
wrappedAction.EndInvoke(result);
}
else
{
threadToKill.Abort();
throw new TimeoutException();
}
}
}
"arabirim üyesi" uygulamak; a...
Zaman geçip Uygulamak kullanmak İç Kat...
Form kimlik doğrulaması zaman aşımı vs...
Nasıl Konsol için bir zaman Aşımı ekle...
Raylar ayarlama oturum zaman aşımı 3...