c#的FetchAsync和委托调用方法

本文关键字:调用 方法 FetchAsync | 更新日期: 2023-09-27 18:03:00

/// <summary>
/// Delegate for executing an asynchronous request.
/// </summary>
public delegate void ExecuteRequestDelegate<T>(LazyResult<T> response);
public void FetchAsync([Optional] ExecuteRequestDelegate<TResponse> methodToCall)
        {
            GetAsyncResponse(
                (IAsyncRequestResult state) =>
                    {
                        var result = new LazyResult<TResponse>(() =>
                                {
                                    // Retrieve and convert the response.
                                    IResponse response = state.GetResponse();
                                    return FetchObject(response);
                                });
                        // Only invoke the method if it was set.
                        if (methodToCall != null)
                        {
                            methodToCall(result);
                        }
                        else
                        {
                            result.GetResult();
                        }
                    });
        }

我现在想调用FetchAsync,但是我不知道怎么调用

service.Userinfo.Get().FetchAsync(new ExecuteRequestDelegate<Userinfo>() {...});

,我得到ExecuteRequestDelegate不包含一个接受0个参数的构造函数。

我能做什么?我想要得到Userinfo数据?

c#的FetchAsync和委托调用方法

FetchAsync的参数是一个接受LazyResult作为唯一参数并返回void的方法。这与"回调"方法的一般模式是一致的,这是编写异步方法的一种方式。为了异步,这个方法将在被调用后立即返回,当逻辑上代表的操作实际上完成时,它将调用回调方法,将异步操作的结果作为参数传递给回调。

虽然您可以编写一个命名方法来处理这种情况,但通常在这里使用lambda更合适:

service.Userinfo.Get().FetchAsync(
    lazyResult => Console.WriteLine(lazyResult.Result));

如果您的代码超过一行左右,那么值得花时间使用命名方法:

public void ProcessResult(LazyResult<Userinfo> result)
{
    //Do stuff
}

service.Userinfo.Get().FetchAsync(ProcessResult);