2
我有一個標準例程,用於從郵件服務器獲取未讀電子郵件,將其標記爲已讀並進行處理。它看起來類似於這樣:使用EWS託管API獲取未讀電子郵件並將其標記爲一次讀取
var view = new ItemView(1);
SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false));
var findResults = ExchangeService.FindItems(WellKnownFolderName.Inbox, sf, view);
if (findResults.Items.Any())
{
EmailMessage emailMsg = findResults.Items.First() as EmailMessage;
emailMsg.IsRead = true;
emailMsg.Update(ConflictResolutionMode.AutoResolve);
ProcessMail(emailMsg);
}
這可以從多種方法調用,所以我需要確保「發現未讀/標記爲已讀」操作的原子性。換句話說,在Service.FindItems()
和mail.Update()
之間,同一封電子郵件可能會被不同的進程讀取兩次,並導致重複的處理。
現在,我不想參與有關存儲處理的電子郵件ID的討論,或者我是否應該使用訪問同一電子郵件服務器的多個進程。
我想知道的是,如果有一個EWS API方法在一次調用中執行這兩個操作?理想情況是這樣的:
var mail = ExchangeService.GetFirstUnreadEmailAndMarkItAsRead()
你有沒有想過這個?試圖確定相同的事情。 – thomas 2018-03-08 21:39:26