你不需要使用异常或同步方法,你可以传回一个不同的IAsyncResult
(假设你使用的模式 - 如果你使用事件或委托模式,你仍然可以能够无例外地实现类似的目标)。
下面是该在这里我们使用一个虚拟的委托返回,如果有一个错误(在这种情况下无效的ID),一个简单的例子:
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();
}
}
你能澄清你正在使用的异步方法呢? (即,IAsyncResult模式,事件模式或委托模式)。请参阅此处获取更多信息:http://blog.maartenballiauw.be/post/2009/04/08/Using-the-ASPNET-MVC-Futures-AsyncController.aspx – 2009-08-10 01:54:58
为什么你会遇到异常?你有没有读过这个:http://stackoverflow.com/questions/77127/when-to-throw-an-exception – 2009-12-21 09:53:30