質問

Ayende掲載 修正 にDavy Brionの 漏電ブレーカー, 記代には、タイムアウトの決議は、lazyモデルです。

private readonly DateTime expiry;

public OpenState(CircuitBreaker outer)
    : base(outer)
{
    expiry = DateTime.UtcNow + outer.timeout;
}

public override void ProtectedCodeIsAboutToBeCalled()
{
    if(DateTime.UtcNow < expiry)
        throw new OpenCircuitException();

    outer.MoveToHalfOpenState();
}

しかし、 コンストラクタに失敗するTimeSpan できオーバーフローの最大値の DateTime.例えば、回路ブレーカーのタイムアウトの最大値は揃.

システム。ArgumentOutOfRangeExceptionで獲れた

メッセージ="を追加または減算値からの連representable DateTime."

...

です。DateTime.op_Addition(DateTime d揃t)

どうしてこの問題を回避するための想定的に振る舞えるのでしょうか?

役に立ちましたか?

解決

ちょっとしたビットの数

する場合 タイムアウトにより、残り の最大値の DateTime 現在の DateTime.最大 TimeSpan 通常ことを示し 機能無限のタイムアウト (これを"一時的"回路ブレーカー).

public OpenState(CircuitBreaker outer)
    : base(outer)
{
    DateTime now = DateTime.UtcNow;
    expiry = outer.Timeout > (DateTime.MaxValue - now) 
        ? DateTime.MaxValue
        : now + outer.Timeout;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top