例外や同期メソッドを使用する必要はありません。別のIAsyncResult
を返すことができます(使用しているパターンを前提としています)。イベントやデリゲートパターンを使用している場合は、例外なしに何か類似したものを達成することができます)。
public class MyAsyncController : AsyncController
{
public IAsyncResult BeginFoo(int id, AsyncCallback callback, object state)
{
Action errorDelegate =() => ViewData["errors"] = "Invalid ID";
// Here's our validation check, return the error delegate if necessary
if (id <= 0) return errorDelegate.BeginInvoke(callback, state);
var webRequest = WebRequest.Create("http://www.apple.com");
return webRequest.BeginGetResponse(callback, webRequest);
}
public ActionResult EndFoo(IAsyncResult asyncResult)
{
if (asyncResult.AsyncState is WebRequest)
{
var webRequest = (WebRequest) asyncResult.AsyncState;
var httpResponse = (HttpWebResponse) webRequest.EndGetResponse(asyncResult);
ViewData["status"] = httpResponse.StatusCode;
}
return View();
}
}
はあなたが使用しているどの非同期的なアプローチを明確することができ:
ここでは、エラー(この場合は、無効なID)があるかどう返すようにダミーのデリゲートを使用します。ここで、この単純な例ですか? (つまり、IAsyncResultパターン、イベントパターンまたはデリゲートパターン)。詳細はこちらをご覧ください:http://blog.maartenballiauw.be/post/2009/04/08/Using-the-ASPNET-MVC-Futures-AsyncController.aspx –
なぜあなたは例外を介していますか?あなたはこれを読んでいる:http://stackoverflow.com/questions/77127/when-to-throw-an-exception –