首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ASP.NET web应用程序中执行等待操作?

在ASP.NET web应用程序中执行等待操作?
EN

Stack Overflow用户
提问于 2012-02-23 14:50:31
回答 2查看 337关注 0票数 1

我想连接到this问题,然而,也许从不同的角度重新表述它。

为了防欺诈的目的,我想阻止访客后,一定数量的不正确的登录尝试。此时,我有一个manager类,它封装了登录的实际函数调用。如果访问者被阻塞,那么管理器会抛出一个异常,因此永远不会调用实际的登录方法。到目前一切尚好。

现在,我想将抛出部分的异常更改为Thread.Sleep类型的东西。但是,这不是一个选项,因为这将阻止对服务器的其他请求。对于这种情况,是否有一个轻松替代方案,可能使用async等待命令,或者使用F#

当前代码:

代码语言:javascript
复制
class Manager {
    void Execute(Action action) {
        if(user.IsBlocked)
            throw new BlockedException();
        else
            action();
    }
}

首选代码:

代码语言:javascript
复制
class Manager {
    void Execute(Action action) {
        if(user.IsBlocked)
            //Wait for xxx minutes


        action();
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-23 15:02:39

这样做会很快消耗资源。您不希望服务器上的多个线程(可能是几十个线程,取决于访问者的数量和块的持续时间)忙着等待直到最终发送响应。此外,访问者将不清楚发生了什么;似乎您的服务器只是没有响应(这是真的)。一个更好的方法是继续抛出异常,也许更优雅地处理它。例如,使用javascript在客户机上显示倒计时,直到您再次尝试为止。

票数 1
EN

Stack Overflow用户

发布于 2012-02-23 17:11:03

您可以创建一个只延迟一段时间的任务(已经可用的帮助方法-- TaskEx.Delay),并等待它--然后在这段时间内不会绑定线程。

所以“//等xxx分钟”应该是“等待TaskEx.Delay(TimeSpan.FromMinutes(xxx))”

您可以在这里看到一个例子:

http://www.codeproject.com/Articles/127291/C-5-0-vNext-New-Asynchronous-Pattern

代码语言:javascript
复制
Console.WriteLine("Before await");
await TaskEx.Delay(1000);
Console.WriteLine("After await");
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9415336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档