0

我已经下载了 ShopifySharp 项目,并试图通过实施 IRequestExecutionPolicy( https://github.com/nozzlegear/ShopifySharp/blob/master/ShopifySharp/Infrastructure/Policies/RetryExecutionPolicy.cs)来制定自己的执行策略。

在示例项目中没有这样的“未实现错误”。但是,类似的实现将这个“[AsyncStateMachine(typeof(SmartRetryExecutionPolicy.d__5<>))]”放在方法之前。

据我所知,使方法异步更改了签名,因此没有实现 Run 方法。我在这方面不是很有经验,所以任何帮助表示赞赏。

public delegate Task<RequestResult<T>> ExecuteRequestAsync<T>(CloneableRequestMessage request);

public interface IRequestExecutionPolicy
{
    Task<RequestResult<T>> Run<T>(CloneableRequestMessage requestMessage, ExecuteRequestAsync<T> executeRequestAsync, CancellationToken cancellationToken, int? graphqlQueryCost = null);
}
public class LeakyBucketExecutionPolicy : IRequestExecutionPolicy{
    public LeakyBucketExecutionPolicy(){}

    public async Task<RequestResult<T>> Run<T>(CloneableRequestMessage baseRequest, ExecuteRequestAsync<T> executeRequestAsync, CancellationToken cancellationToken, int? graphqlQueryCost = null)
    {
        //retry code
    }
4

1 回答 1

0

据我所知,使方法异步更改签名

不,这不对。这正是您永远不会async在界面中看到的原因。

async关键字只是让你可以做awaits 而return T不是return Task<T>. 编译器将为您包装它。但是签名和运行时调用方法的方式都是相同的。

于 2021-09-29T10:30:52.993 回答