相关疑难解决方法(0)

async方法可以阻塞变量而不是调用方法吗?

试着写一个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只是因为奇怪的情况我可以得到消息的响应在我设置等待它之前.

关于我可以用来做什么的任何想法?

c# asp.net-web-api

3
推荐指数
1
解决办法
46
查看次数

Task.WhenAll 之后的 .Result 或等待

我有两个任务,我等待它们完成

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

c# asynchronous task

3
推荐指数
1
解决办法
2747
查看次数

LINQ 选择异步方法的模拟

假设我有以下示例代码:

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 对beforeafter

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 …

.net c# linq async-await

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

从 http flurl 客户端捕获异常时出现问题

我有一个 .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)

winforms flurl asp.net-core

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