最近在调用厂商的dll时发现有时候会停在dll里出不来,因为等不及厂商改,所以只能调用的方法外围加上超时管控了,以下是demo 代码,用作自己的记录:用到的Task.Run(()=>自己不可控的方法).wait(指定时间),意思就是在指定时间内,如果那个自己不可控的方法执行完了,便没啥事,如果走丢了就不等它了,直接往下跑,用它的前辈Task.Factory.StartNew也可以,但是看微软的说明还是有点差别的,只是我目前还没有涉及到那些区别,所以就没再研究。
static void Main(string[] args)
{
double data = 0;
bool result = Task.Run(() =>
{
data = calcu();
}).Wait(5*1000);
if (result)
{
Console.WriteLine(data);
}
else
{
Console.WriteLine("overtime!");
}
Console.ReadLine();
}
static double calcu() //假装这个是厂商那个跑不出来的方法,定多少个0就看自己电脑的速度了
{
double data = 0;
for (int i = 0; i < 1000000000000; i++) {
data = i * i;
}
return data;
}
最后出来的结果:
不过要注意一个问题,如果后边的程式还没有运行完,但是那个不可控的方法却运行完了,就会出现另一个结果:
下面是关于Task.Run
关于Task.Run和Task.Factory.StartNew的区别,有兴趣的同学可以研究一下哈
https://devblogs.microsoft.com/pfxteam/task-run-vs-task-factory-startnew/