试着写一个API,我有一个奇怪的案例,我试图解决如下:
if (!request.WillCheckGetLater)
{
// Client calling is willing to wait only for certain amount of time
var clientWillingToWaitFor = GetResponseTime(request);
var needsToUpdateResponse = await AwaitResponse(heldBidRequest, clientWillingToWaitFor);
SendMessage(...);
return needsToUpdateResponse;
}
else
{
SendMessage(...);
return false;
}
Run Code Online (Sandbox Code Playgroud)
在我的Post方法中,我正在尝试等待该方法.基本上当我收到帖子时,我构建一个"简短"答案,客户端使用API中的GET方法检查"长"答案,但也可以在POST中直接询问长答案,但必须指定如何他愿意等待那么长的答案,否则我默认为"简短"答案......
我的SendMessage方法基本上是第三方通信系统,我订阅和发布消息.
现在,当线
var needsToUpdateResponse = await AwaitResponse(heldBidRequest, clientWillingToWaitFor);
Run Code Online (Sandbox Code Playgroud)
执行,它阻止这段代码,SendMessage直到任务结束才执行,理想情况下我宁愿在返回时阻止它.
我没有必要想要调用SendMessage First只是因为奇怪的情况我可以得到消息的响应在我设置等待它之前.
关于我可以用来做什么的任何想法?
我有两个任务,我等待它们完成
await Task.WhenAll
之后直接调用获取值会不会有问题.Result
我确信任务已经完成。
`
Task<int> t1 = Task.FromResult(1);
Task<int> t2 = Task.FromResult(2);
await Task.WhenAll(t1, t2);
var uuu = t1.Result;
// or var uuu = await t1;
Run Code Online (Sandbox Code Playgroud)
`
问题是 Visual Studio 设置了VSTHRD103 Call async methods when in an async method警告。
我检查了一下sharplab,结果版本 jit 有点小。
.Result如果我已经用 等待他们之后再打电话,我会遇到僵局吗Task.WhenAll?
假设我有以下示例代码:
private static async Task Main(string[] args)
{
var result = Enumerable.Range(0, 3).Select(x => TestMethod(x)).ToArray();
Console.ReadKey();
}
private static int TestMethod(int param)
{
Console.WriteLine($"{param} before");
Thread.Sleep(50);
Console.WriteLine($"{param} after");
return param;
}
Run Code Online (Sandbox Code Playgroud)
TestMethod 将运行完成 3 次,因此我将看到 3 对before和after:
0 before
0 after
1 before
1 after
2 before
2 after
Run Code Online (Sandbox Code Playgroud)
现在,我需要使 TestMethod 异步:
private static async Task<int> TestMethod(int param)
{
Console.WriteLine($"{param} before");
await Task.Delay(50);
Console.WriteLine($"{param} after");
return param;
}
Run Code Online (Sandbox Code Playgroud)
如何为此异步方法编写类似的 Select 表达式?如果我只使用 async lambda Enumerable.Range(0, 3).Select(async x …
我有一个 .net5 的 Rest api,它有一个全局异常过滤器,并在出现异常时返回一个 ErrorMessage 对象。我从 WinForms .net Framework 4.8 应用程序调用 api,并从服务器调用错误请求,从客户端我得到一个 System.AggregateException 异常,根据 flurl 文档,它应该是 FlurlHttpException。我尝试使用 HttpClient 进行调用,一切都按预期工作,但我发现使用 flurl 更容易,所以我想找到问题的解决方案,如果有人知道如何做到这一点并想要分享它伟大的
try
{
var result = (serverUrl)
.AppendPathSegment(endPoit)
.PostJsonAsync(new { Email = email, Password = password }).Result;
if (result.ResponseMessage.IsSuccessStatusCode)
{
var aut = result.GetJsonAsync<Autorizacion>().Result;
}
}
catch (FlurlHttpException ex)
{
var error = ex.GetResponseJsonAsync<ErrorMessage>();
}
Run Code Online (Sandbox Code Playgroud) c# ×3
.net ×1
asp.net-core ×1
async-await ×1
asynchronous ×1
flurl ×1
linq ×1
task ×1
winforms ×1