在不使用异步编程的情况下,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#中的超时方法

你可以这样做。如何为一行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++;
}