У меня есть служба Windows, разработанная в C#, которая выполняет некоторые вычисления на данных с равными интервалами времени, скажем, 30 минут. Он извлекает данные из базы данных и вызывает метод CalcData (), который выполняет вычисления бизнес-логики c.
class Program
{
static void Main(string[] args)
{
try
{
AutoCalExecution ae = new AutoCalExecution();
ae.FetchData();
ae.CalData();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
}
class AutoCalExecution
{
public void FetchData()
{
// fetch data from db
}
public void CalData()
{
line1;
line2;
line3;
line4; // this line has som expression which actually does the calculation.
line5;
}
}
Я дал шаблон кода, который я использую. В CalData()
, line4 - это место, где происходит вычисление. Расчет обычно занимает 10 минут. Таким образом, line4 выполняется в течение 10 минут.
Есть сценарий ios, где вычисление может занять более 10 минут. В этом случае я хочу отменить выполнение и go до строки 5 через определенное время, скажем, 15 минут.
Подводя итог, я хочу установить время ожидания для line4 на 15 минут (которое может быть настроено на основе требований). Если оно не заканчивается sh через 15 минут, оно должно остановиться и прийти на line5.
public void CalData()
{
line1;
line2;
line3;
if ( set time to 15 mins exceeds){
line4; // this line has some expression which actually does the calculation.
}
else
{
Log (Line4 execution did not complete in stipulated time);
}
line5;
}
Как мне установить это условие в C#?
Обновление
Это то, что я пробовал:
var task = Task.Run(() => CalData());
if (task.Wait(TimeSpan.FromMinutes(Convert.ToDouble(timeout))))
{
if (task.Result)
{
log.Info("Completed");
}
else
{
log.Error("Not successful");
}
}
Но проблема здесь в том, что я хочу, чтобы строка 5 выполнялась в этом методе, если строка 4 не заканчивается sh. Есть ли способ, которым я могу написать этот похожий код для фрагмента кода / фрагмента вместо целого метода?