C# 不清楚通过某个特定操作要传递什么<;T、 R>;

C# 不清楚通过某个特定操作要传递什么<;T、 R>;,c#,.net-core,restsharp,C#,.net Core,Restsharp,我正在尝试在.netcore应用程序中实现库RestSharp.Core;但它没有文档 我需要实现这个方法 public virtual RestRequestAsyncHandle ExecuteAsyncPost(IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback, string httpMethod) 有什么想法吗?我真的很困惑。第二个参数是一个操作(方法),它接受一个Res

我正在尝试在
.netcore
应用程序中实现库
RestSharp.Core
;但它没有文档

我需要实现这个方法

public virtual RestRequestAsyncHandle ExecuteAsyncPost(IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback, string httpMethod)

有什么想法吗?我真的很困惑。

第二个参数是一个
操作
(方法),它接受一个
RestRequestAsyncHandle
,并返回一个
IRestResponse


换句话说,此方法正在寻找一种方法,在完成后作为回调调用。

RestSharp使用回调样式的异步,这在其他平台(例如Node)中非常常见,但在.NET中从未真正流行

为了实现
ExecuteAsyncPost
,您需要使用
请求
httpMethod
参数来启动异步post,然后返回表示该操作的
RestRequestAsyncHandle

然后,当post完成时,您应该构建一个
IRestResponse
实例,并将其与
RestRequestAsyncHandle
一起传递给
回调
。传递给
回调的
RestRequestAsyncHandle
应与已从
ExecuteAsyncPost
返回的实例相同

由于
RestRequestAsyncHandle
似乎是围绕
HttpWebRequest
构建的,因此您应该能够执行以下操作:

public override RestRequestAsyncHandle ExecuteAsyncPost(IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback, string httpMethod)
{
  HttpWebRequest webRequest = /* Construct webRequest from request/httpMethod */
  var result = new RestRequestAsyncHandle(webRequest);
  DoWebRequest(webRequest, result, callback);
}

private async void DoWebRequest(HttpWebRequest webRequest, RestRequestAsyncHandle result, Action<IRestResponse, RestRequestAsyncHandle> callback)
{
  IRestResponse response;
  try
  {
    var webResponse = await webRequest.GetResponseAsync().ConfigureAwait(false);
    response = /* Construct an IRestResponse using webResponse */
  }
  catch (Exception ex)
  {
    response = /* Construct an IRestResponse with error information */
  }
  callback(response, result);
}
public override RestRequestAsyncHandle executesyncpost(IRestRequest请求、操作回调、字符串httpMethod)
{
HttpWebRequest webRequest=/*根据请求/httpMethod构造webRequest*/
var result=新的RestRequestAsyncHandle(webRequest);
DoWebRequest(webRequest、结果、回调);
}
私有异步void DoWebRequest(HttpWebRequest webRequest、RestrequeStatAsyncHandle结果、操作回调)
{
iResponse反应;
尝试
{
var webResponse=await webRequest.GetResponseAsync().ConfigureAwait(false);
response=/*使用webResponse构建IRestResponse*/
}
捕获(例外情况除外)
{
response=/*使用错误信息构造IREStreponse*/
}
回调(响应、结果);
}

请注意,我在这里有意使用
async void
,因为我们正在实现一个基于回调的异步系统,我希望回调方法的异常能够在顶层处理。在绝大多数正常的
async
/
wait
使用中,您应该避免
async void

对,我理解这一点。但是我很难弄清楚这个方法应该是什么样子。我原以为
(请求,处理程序)=>{}
可以工作,但是不行。。。你说它取一个,然后返回另一个。这可能更有意义。是的,您的方法必须返回一些内容。您的lambda同时获取这两个值并返回void。它不会编译的。非常感谢你,这真的很有帮助。
public override RestRequestAsyncHandle ExecuteAsyncPost(IRestRequest request, Action<IRestResponse, RestRequestAsyncHandle> callback, string httpMethod)
{
  HttpWebRequest webRequest = /* Construct webRequest from request/httpMethod */
  var result = new RestRequestAsyncHandle(webRequest);
  DoWebRequest(webRequest, result, callback);
}

private async void DoWebRequest(HttpWebRequest webRequest, RestRequestAsyncHandle result, Action<IRestResponse, RestRequestAsyncHandle> callback)
{
  IRestResponse response;
  try
  {
    var webResponse = await webRequest.GetResponseAsync().ConfigureAwait(false);
    response = /* Construct an IRestResponse using webResponse */
  }
  catch (Exception ex)
  {
    response = /* Construct an IRestResponse with error information */
  }
  callback(response, result);
}