我使用遠程雲服務器來存儲我的圖像。如果我使用控制檯執行這些代碼,它運行良好,但在asp.net mvc中它始終掛在在 「的WaitOne()」ManualResetEvent.WaitOne始終掛在ASP.NET MVC
public class UploadUtil
{
public static string UploadBase64(string bucket,string filelocation)
{
//qiniu.Config.ACCESS_KEY = System.Configuration.ConfigurationManager.AppSettings["ACCESS_KEY"];
//qiniu.Config.SECRET_KEY = System.Configuration.ConfigurationManager.AppSettings["SECRET_KEY"];
qiniu.Config.InitFromAppConfig();
string qiniuKey = Guid.NewGuid().ToString();
string returnUrl = string.Empty;
ManualResetEvent done = new ManualResetEvent(false);
jpegToBase64 jpeg = new jpegToBase64(filelocation);
QiniuFile qfile = new QiniuFile(bucket, qiniuKey);
qfile.UploadCompleted += (sender, e) => {
returnUrl = e.RawString;
Console.Write(e.RawString);
done.Set();
};
qfile.UploadFailed += (sender, e) => {
QiniuWebException qe = (QiniuWebException)e.Error;
Console.WriteLine(qe.Error.ToString());
};
qfile.UploadString((int)jpeg.Filesize, "image/png", jpeg.Base64Content);
done.WaitOne();
return returnUrl;
}
}
的ActionResult的是這樣的,如果我用正常的ActionResult,該錯誤會occurd,所以我必須使用任務
public Task<ActionResult> TestUpload()
{
var s = UploadUtil.UploadBase64("kmsfan", @"D:\\b.jpg");
return null;
}
阻塞代碼對Web服務器沒有的地方,會導致相當迅速擴展問題。使用異步並使用TaskCompletionSource代替MRE並等待其Task任務將在這裏更好。 – spender
@spender嗨,你能告訴我代碼嗎?因爲我不熟悉你的解釋。 – MapleStory
您正在阻止同步上下文,從而導致死鎖,使用MVC調用「異步等待」,這將不會導致死鎖 –