目前我面臨着我無法大量的工作和搜索後,解決一個問題,我問過類似的問題,但沒有得到任何答覆,也許是因爲我沒有正確地問它,所以我刪除了這個問題。在ASP.net + C#.NET互斥訪問
好吧我正在使用MailBEE.net對象庫下載電子郵件,它的工作正常,除非如果再次調用下載方法,而前一個調用仍處於下載階段,則兩個消息副本開始下載,這是錯誤的。
的ASP.net頁面上我打電話說電子郵件下載一個ASHX處理程序
public class sync : IHttpHandler {
public void ProcessRequest(HttpContext context)
{
ApplicationData.layer Functions = new layer();
context.Response.ContentType = "text/text";
int messageCount = Convert.ToInt16(context.Request.QueryString["messageCount"]);
if (Functions.SyncMail("email", "user", "password", "pop.gmail.com", messageCount) == "Successful")
{
context.Response.Write("New Messages Downloaded.");
}
//context.Response.Write("Hello World");
}
}
我打電話使用jQuery從另一個(ASPX)頁以上ASHX處理程序
<script type="text/javascript">
$(document).ready(function() {
asyncLoad();
});
function asyncLoad() {
document.getElementById("CustomerDetails").innerHTML = "<img alt='' src='Images/ajax-loader.gif' />" + " <span>Downloading New Messages...</span>";
$('#CustomerDetails').load("sync.ashx?messageCount=" + "10");
callAgain();
}
function callAgain() {
setInterval(asyncLoad, 20000);
}
</script>
的目的是在一段時間(20000延遲)後繼續調用sync.ashx來檢查新消息,問題是如果sync.ashx的一個呼叫在下載消息中忙於在此期間進行新呼叫,則它開始下載相同的消息副本,因爲它找不到ema的ID數據庫中的前一個電話將要發出。
我需要某種形式的互斥訪問,如果一次通話是在忙下載郵件然後另一個呼叫不應進行。
喜歡的東西
if(IsAlreadyDownloading == False)
{
Functions.SyncMail(params)
}
凡IsAlreadyDownloading是一個全球性的標誌或互斥應設置爲true,一旦一個呼叫開始下載和設置假,一旦它完成下載或已經發生了一些異常,表明另一個呼叫可安全地做。
因爲它是一個ASP.net應用程序,我們不知道什麼時候用戶將導航從開始下載呼叫,什麼時候會返回到該頁面,以便再次調用下載處理程序應進行或不離開當前頁面。
我不知道我是否正確解釋了它,但我希望有人能理解。謝謝。