在F#中编写异步http处理程序时,有人能告诉我一个好的模式吗?
我必须实施IHttpAsyncHandler
,该界面需要BeginProcessRequest
和EndProcessRequest
。
我是否会返回Async.StartTask
?如何处理state:obj
和AsyncCallback
?
答案 0 :(得分:3)
脱离我的头脑:使用异步工作流实现处理程序,然后使用Async.AsBeginEnd
公开它open System
open System.Web
type HttpAsyncHandler() =
let processRequestAsync (context : HttpContext) = async {
// TODO: implement
return()
}
let beginAction, endAction, _ = Async.AsBeginEnd(processRequestAsync)
interface IHttpAsyncHandler with
member this.BeginProcessRequest(context, callback, extraData) = beginAction(context, callback, extraData)
member this.EndProcessRequest(iar) = endAction (iar)
// other members omitted
答案 1 :(得分:1)
你到底在想做什么?如果您有能力,您可能需要考虑来自HttpMessageHandler
的System.Net.Http
及其同类。您只需覆盖
protected abstract Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken);
方法,使用async { ... } |> Async.StartAsTask
很容易。您还可以通过静态类型更好地访问HTTP的各种属性。各种子类允许您通过ASP.NET,WCF(自托管)或甚至第三方平台(如OWIN)运行。