默認的Func不支持Out,ref類型的參數,因此須要自定義個delegate func來知足需求。具體代碼以下ide
public delegate TResult FuncEX<T1, T2, T3, T4, T5, out TResult>(T1 obj1, T2 obj2, out T3 obj3, out T4 obj4, ref T5 obj5); public void ContractFileDownload_DownloadPurOrder() { decimal seqID = Request["ID"].ExToDecimal(); decimal supplierID = Request["SupplierID"].ExToDecimal(); string msg = ""; string fileUrl, filePath; HttpContext MainthreadContext = HttpContext.Current; FuncEX<decimal, decimal, string, string, HttpContext, string> dl = PurOrder; dl.BeginInvoke(seqID, supplierID, out fileUrl, out filePath, ref MainthreadContext, TakesAWhileCompleted, dl); } public string PurOrder(decimal seqID, decimal supplierID, out string fileUrl, out string filePath,ref HttpContext context) { using (var bllProvider = BLLProviders.Create()) { return bllProvider.Cas_invest_contractBLL.downLoad_PurOrder(seqID, supplierID, out fileUrl, out filePath,ref context); } } public void TakesAWhileCompleted(IAsyncResult ar) { if (ar != null) { string fileUrl, filePath; HttpContext currentContext=null; FuncEX<decimal, decimal, string, string, HttpContext, string> dl = (FuncEX<decimal, decimal, string, string, HttpContext, string>)ar.AsyncState; string msg = dl.EndInvoke(out fileUrl, out filePath, ref currentContext, ar); } }