c# - 如何在循环中等待操作响应 C#

标签 c# wcf xamarin async-await action

我们有一个要循环的集合,我们需要对集合中的每个项目进行服务调用,并在执行集合中的下一个服务调用之前等待响应。

问题是我无法在执行集合中的下一个项目之前等待响应,我确实设法通过使用 TaskCompletionSource 触发结果来使其工作,但这看起来很脏。有更好的方法吗?

我尝试过使用“Func oftype Task”,但似乎无法使其正常工作。

public async Task<bool> PerformRTV(string policyId)
      {
        if (!Instance.RTVDone)
        {
            var result = new TaskCompletionSource<bool>();

            PerformValuation(policyId, resp =>
            {
                if (!(resp.Error is null))
                {
                    ErrorService.LogError(resp.Error);
                    result.SetResult(false);
                    return;
                }

                if (!resp.Result)
                {
                    result.SetResult(false);
                    return;
                }

                result.SetResult(true);
                return;

            });

            return await result.Task;
        }
        else
        {
            return true;
        }

    }


    private void PerformValuation(string policyId, Action<#########CompletedEventArgs> response)
    {
        Service.HookResponseHandlerToServiceEvent(_portfolioServiceClient, nameof(_portfolioServiceClient.#########Completed), response);
        _portfolioServiceClient.#########RTVAsync(policyId, ApplicationSettings.Authentication.TPCodeID);
    }

简而言之,我在循环中调用 PerformRTV,并希望在使用循环中的下一项调用 PerformRTV 之前等待响应。

最佳答案

不,TaskCompletionSource 不脏。我认为这是要走的路。

我只会返回任务本身,而不是在此方法中等待它(不是异步方法)。等待的决定可以更上一层楼。您可能需要等待多个电话。要直接返回 true,您可以使用 Task.FromResult()

关于c# - 如何在循环中等待操作响应 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57605551/

相关文章:

c# - 如何将(启动的)ConfigureServices 方法拆分为多个文件

c# - 如何在 WPF 和 ASP.NET MVC 应用程序之间共享最多的代码?

c# - 如何在 WCF 中识别经过身份验证的用户?

WCF GZip 压缩请求/响应处理

c# - 用户控件阻止底层用户控件接收拖放内容

c# - 如何获取要在DbContext c#中创建的下一个实体的主键(id)

asp.net - 如何让服务从 global.asax 启动而无需调用它?

visual-studio - 无法从 Windows 计算机连接到在 Mac 上运行的 Xamarin.iOS

c# - 你如何从 xamarin 中的绝对 NSURL 加载文件

c# - Google Sheets API,在 C# 中为用户获取电子表格