相关疑难解决方法(0)

异步等待Task <T>以超时完成

我想等待Task <T>完成一些特殊规则:如果在X毫秒后它还没有完成,我想向用户显示一条消息.如果它在Y毫秒后没有完成,我想自动请求取消.

我可以使用Task.ContinueWith异步等待任务完成(即安排在任务完成时执行的操作),但这不允许指定超时.我可以使用Task.Wait同步等待任务完成超时,但这会阻止我的线程.如何异步等待任务完成超时?

.net c# task-parallel-library

350
推荐指数
13
解决办法
20万
查看次数

将超时设置为操作

我有obj第三方组件的对象,

// this could take more than 30 seconds
int result = obj.PerformInitTransaction(); 
Run Code Online (Sandbox Code Playgroud)

我不知道里面发生了什么.我所知道的是,如果需要更长的时间,那就失败了.

如何为此操作设置超时机制,以便如果超过30秒我只是抛出MoreThan30SecondsException

c# multithreading timeout

41
推荐指数
4
解决办法
7万
查看次数

通用尝试并在C#中使用超时重试?

我正在寻找一个通用的尝试,并在C#中使用超时重试.基本上,我想要以下内容:

bool stopTrying = false;
DateTime time = DateTime.Now;
while (!stopTrying)
{
    try
    {
        //[Statement to Execute]
    }
    catch (Exception ex)
    {
        if (DateTime.Now.Subtract(time).Milliseconds > 10000)
        {
            stopTrying = true;
            throw ex;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我等待10秒,但它应该是基于参数的变量超时.我不想在需要使用它的任何地方重复这个完整的代码.我的代码中有多个地方,它们不是API中内置的超时,如果应用程序尚未准备好执行语句,我将遇到异常.这也可以避免在这些声明之前对我的应用程序中的延迟进行硬编码.

澄清:有关陈述可能类似于转让.如果我使用委托和method.Invoke,是不是作用在委托内的调用而不是原始方法?

.net c#

5
推荐指数
1
解决办法
2万
查看次数