c# - .Net 中的 Async/await --> 调用没有异步实现的服务方法

标签 c# .net asp.net-mvc async-await

基本上,我需要使用供应商的 .Net SDK 发出远程请求以获取一些信息。他们的 SDK 在他们的方法上没有异步实现,所以我试图自己想出一些东西。我基本上想将此请求发送到同步方法,并只等待一定的时间。如果请求花费的时间太长,我需要采取行动并在我们的网络应用程序中将其报告给客户。

我想知道这是否是最好的方法,还是有更好的方法?下面的代码是从 Controller 操作调用的服务方法。

    public async Task<bool> SignersAdded(string packageId)
    {
        var timeout = 5000;

        var task = Task.Run(() =>
        {
            var package = _eslClient.GetPackage(new PackageId(packageId));
            return package != null && package.Documents.Values.Any(x => x.Signatures.Any());
        });

        var stopwatch = Stopwatch.StartNew();

        while (!task.IsCompleted)
        {
            if (stopwatch.ElapsedMilliseconds >= timeout)
                return false;
        }

        return false;
    }

最佳答案

Task.Wait 有一个重载,它采用定义超时的 int

public Task<bool> SignersAdded(string packageId)
{
    var timeout = 5000;

    var task = Task.Run(() =>
    {
        var package = _eslClient.GetPackage(new PackageId(packageId));
        return package != null && package.Documents.Values.Any(x => x.Signatures.Any());
    });

    if(!task.Wait(1000 /*timeout*/))
    {
        // timeout
        return false;
    }
    return task.Result;
}

关于c# - .Net 中的 Async/await --> 调用没有异步实现的服务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31461396/

相关文章:

c# - 单个正则表达式来解析此日志格式?

c# - Visual Studio MVC 5 无需密码登录

.NET 5 ASP.NET Core 应用程序未在 Azure 中启动

.net - 如何使用默认文本填充空文本框?

asp.net-mvc - POST 请求后重定向时 MVC3 401 未经授权的响应

c# - MVC4 WebGrid 和 Ajax 分页

C# - DateTime.FromFileTimeUtc 到 DateTime.FromFileTime

c# - 最好只对内部的静态字段使用类或结构

c# - 如何为海关结构列表创建 ToString() 方法

c# - 在自动化测试中单击元素时遇到问题