在不使用异步编程的情况下,c#中的超时方法
本文关键字:超时 方法 情况下 异步 编程 | 更新日期: 2023-09-27 18:14:09
是否有办法超时一段时间后,如果它不返回结果不使用异步编程的方法?
如果不能没有异步编程,请给我异步解决方案,但前者是首选。
static void Main(string[] args){
string s=function(string filename); //want to time this out in 10 secs if does not return result
}
public string function(string filename){
//code placed here to ftp a file and return as string
//i know .net ftp library has its own timeouts, but i am not sure if they are that trust worthy
}
你可以这样做。如何为一行c#代码设置超时
private static void Main(string[] args)
{
var tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
int timeOut = 10000; // 10 s
string output = ""; // the return of the function will be stored here
var task = Task.Factory.StartNew(() => output = function(), token);
if (!task.Wait(timeOut, token))
Console.WriteLine("The Task timed out!");
Console.WriteLine("Done" + output);
}
private static string function()
{
Task.Delay(20000).Wait(); // assume function takes 20 s
return "12345";
}
显然这不会打印12345
。因为方法超时了
我认为您可以为循环发生的次数设置一个限制。我承认,我不会这样编程,但我也不会让这样的东西不是异步的,所以不要评判。
int loopnumber = 0;
int loopmax = 1000;
while (loopnumber <= 1000)
{
//Do whatever
loopnumber++;
}