基本上,我需要使用供应商的 .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/