내 .net 도메인 개체 내 각 상태 전환을 추적하고 있습니다. 상태 집합을 상태 기록 컬렉션에 넣으면됩니다. 따라서 나중에 상태가 바뀐 에 어떤 시간에 바뀌 었는지 알기 위해 내림차순 목록을 볼 수 있습니다. 새로운 RequestStateHistoryItem
인스턴스화하면, 현재 날짜가 자동으로 할당됩니다.Net DateTime 정밀도
private void SetState(RequestState state)
{
var stateHistoryItem = new RequestStateHistoryItem(state, this);
stateHistoryItems.Add(stateHistoryItem);
}
:
그래서 이런 방법이있다. 이 같은
protected IdentificationRequestStateHistoryItem()
{
timestamp = EntityTimestamp.New();
}
EntityTimestamp
객체는 사용자와 appropiate 만들어 변경된 일자를 포함하는 것을 목적으로한다.
상태 기록을 나열
, 나는 Linq에와 내림차순을 수행 새Request
처음 상태
Received
를 인스턴스화 지금
public virtual IEnumerable<RequestStateHistoryItem> StateHistoryItems
{
get { return stateHistoryItems.OrderByDescending(s => s.Timestamp.CreatedOn.Ticks); }
}
는 생성자 SetState(RequestState.Received)
에 설정되어 있습니다. 그런 다음 지연없이 일부 조건에 따라 새 상태 Started
이 설정됩니다. 잠시 후 (db 작업) 상태가 Finished
으로 설정됩니다.
이제 내림차순 정렬을 수행 할 때 Received
은 항상 Started
상태 이후입니다. 느리게 디버깅 할 때 또는 Started
으로 상태를 설정하기 전에 System.Threading.Thread.Sleep(1000)
을 넣을 때 순서가 작동합니다. 위의 이야기로 는 그렇지 않은 경우는 Started
상태의 CreatedOn는 Received
CreatedOn 일 후 오래!
TimeOfDay {17:04:42.9430318} FINSHED
Ticks 634019366829430318
TimeOfDay {17:04:39.5376207} RECEICED
Ticks 634019366795376207
TimeOfDay {17:04:39.5367815} STARTED
Ticks 634019366795367815
어떻게 될 수 있습니까? 나는받은 경우 이해 및 날짜가 정확히 동일 시작,하지만 난 그것도 다른 하나는 전에 할 수있는 방법을 이해하지 못하는 것?
이미 다른 질문에서 찾은 new DateTimePrecise().Now,
(DateTimePrecise class 참조)을 시도했습니다. 같은 결과.
누구나 그 사람이 무엇인지 알 수 있습니까?
업데이트
public virtual bool Finish()
{
// when I put the SetState(State.Received) from the constructor into here, the timestamp of finish still is BEFORE received
SetState(IdentificationRequestState.Received);
SetState(IdentificationRequestState.Finished);
// when I put the SetState(State.Received) after Finished, then the Received timestamp is BEFORE Finished
SetState(IdentificationRequestState.Finished);
SetState(IdentificationRequestState.Received);
var match = ...
if (match != null)
{
...
}
else
{
...
}
}
당신이 다중 스레드 환경에서 실행중인 : 당신이 엄격한 순서를 원하는 경우
, 당신은 동기화를 사용하는 당신은 역사 항목을 인스턴스화 할 때마다 다음과 같은 뭔가가 필요? Received 및 Started 상태가 다른 스레드에 의해 요청 된 경우 이는 표시되는 불일치를 설명합니다. –