Thread Abort Exception in.NET 4.5によると、私はQueueBackgroundItemを使用する必要があります。待機中のバックグラウンドWorkItemの遅延
何らかの理由で、キューに入れられているバックグラウンド項目を直接開始しないでください(同じユーザーがEWSから直接取得しなければならないデータを要求したため、Exchangeサーバーはその後完全な同期を直接行うことが悪意のあるDoS EWSで試行します)、アイテムがキューイングされた後に特定のTimeSpan
だけが送信されます。
だから、私は次のように作っ:Why use async with QueueBackgroundWorkItem?で説明したいくつかの理由から
public static void DoAfter(TimeSpan waitFor, Action<Logger> action)
{
HostingEnvironment.QueueBackgroundWorkItem(async ct =>
{
await Task.Delay(waitFor);
DatabaseLogger logger = new DatabaseLogger(DebugLevel.TOSQL, db);
logger.Log("Executing " + action.Method.Name + ", " + DateTime.Now.ToLongTimeString());
try
{
action(logger);
logger.Log("Successfully executed " + action.Method.Name + ", " + DateTime.Now.ToLongTimeString());
}
catch (Exception e)
{
logger.Log("Error in " + action.Method.Name + ": " + e.Message + ", " + DateTime.Now.ToLongTimeString());
}
finally
{
logger.CloseDatabase();
}
});
}
、 "あなたはここでasync
を使用しないでください"。
しかし、「その代わりThread.Sleep
使用Task.Delay
を使用する」とし、await task.Delay
セマンティックコンパイラエラーにを与えるには、「演算子を待つ非同期ラムダ式の中でのみ使用することができ、」私はBackgroundWorkItemキューを詰まらせることなくBackgroundWorkItemを遅らせるだろうか、?