私は以下のなかったF#で同じインターフェイスを実装する場合、FExceptionでIExceptionHandlerやIExceptionLoggerなどのメッセージハンドラを実装するときに「空のタスク」を返す正しい方法は何ですか? C#ので
type DefaultExceptionHandler() =
let mapExceptionTypetoHttpStatusCode (ex:Exception) : HttpStatusCode =
match ex with
| :? ArgumentException -> HttpStatusCode.BadRequest
| _ -> HttpStatusCode.InternalServerError
interface IExceptionHandler with
member x.HandleAsync (context:ExceptionHandlerContext, cancellationToken:CancellationToken) =
let request = context.Request
let ex = context.Exception
let httpStatusCode = mapExceptionTypetoHttpStatusCode ex
context.Result <- { new IHttpActionResult with member x.ExecuteAsync(token:CancellationToken) = Task.FromResult(request.CreateErrorResponse(httpStatusCode, ex)) }
Task.FromResult(0) :> Task
コンパイラがどのキャストTask.FromResult(0) :> Task
を必要とした
public class DefaultExceptionHandler : IExceptionHandler
{
public Task HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken)
{
context.Result = new ErrorActionResult(context.Request, context.Exception);
return Task.FromResult(0);
}
}
、私はこれに似た何かをするだろうこれらのハンドラを実装しますC#の例では必須ではありません。 F#のExecuteAsync
メソッドから返される正しい、慣用的な方法は何ですか?
ありがとうございます。私はそのままキャストでうまくいく。私はそれが適切で慣用的であることを確認したかったのです。私はベールに浸透するにつれ、F#が本当に好きです。 – pluralMonad
コロンと角括弧を入力したくない場合は、 'upcast'演算子を使用することもできます。 –