並非 Web 多線程難以處理,而是長期面向頁面開發導致 OO 設計能力退化。
核心概念:每筆任務對應一個訊息持有者物件,封裝狀態與行為。
public abstract class MessageHolder
{
public DateTime SendTime { get; set; }
public string ReceiverMail { get { return Receiver.Mail; } }
public string ErrorMessage { get; set; }
public int SendCount { get; set; }
public bool SendExpired { get { return SendCount > 5; } }
public bool SendOk { get; private set; }
public Guid Id { get; private set; }
public string SendResult
{
get
{
if (SendOk) return "發送成功";
if (SendExpired) return "發送失敗";
return "等待發送";
}
}
}
public class MailMessageHolder : MessageHolder
{
public string Title { get; private set; }
public string Text { get; private set; }
}
List<MessageHolder> 序列化資料,顯示進度。