From c5c9fe8a0402684f377825bf510353e48886154c Mon Sep 17 00:00:00 2001 From: ZjzMisaka Date: Sun, 9 Mar 2025 23:19:01 +0800 Subject: [PATCH] [*] Should not call DateTime.ToLocalTime inner PTP --- .../Core/PowerThreadPool.Events.cs | 24 ++++++++--------- .../EventArguments/ErrorOccurredEventArgs.cs | 6 ++--- .../EventArguments/WorkEventArgsBase.cs | 27 ++++++++++++++----- PowerThreadPool/Results/ExecuteResult.cs | 2 +- PowerThreadPool/Results/ExecuteResultBase.cs | 3 +++ PowerThreadPool/Works/WorkBase.cs | 3 +++ 6 files changed, 43 insertions(+), 22 deletions(-) diff --git a/PowerThreadPool/Core/PowerThreadPool.Events.cs b/PowerThreadPool/Core/PowerThreadPool.Events.cs index 86b99e5..7bd5d9a 100644 --- a/PowerThreadPool/Core/PowerThreadPool.Events.cs +++ b/PowerThreadPool/Core/PowerThreadPool.Events.cs @@ -31,7 +31,7 @@ internal void InvokeWorkEndedEvent(ExecuteResultBase executeResult) { executeResult.EndDateTime = DateTime.UtcNow; Interlocked.Increment(ref _endCount); - Interlocked.Add(ref _executeTime, (long)(executeResult.EndDateTime - executeResult.StartDateTime).TotalMilliseconds); + Interlocked.Add(ref _executeTime, (long)(executeResult.UtcEndDateTime - executeResult.UtcStartDateTime).TotalMilliseconds); if (WorkEnded != null) { WorkEndedEventArgs e = new WorkEndedEventArgs() @@ -40,9 +40,9 @@ internal void InvokeWorkEndedEvent(ExecuteResultBase executeResult) Exception = executeResult.Exception, Result = executeResult.GetResult(), Succeed = executeResult.Status == Status.Succeed, - QueueDateTime = executeResult.QueueDateTime, - StartDateTime = executeResult.StartDateTime, - EndDateTime = executeResult.EndDateTime, + QueueDateTime = executeResult.UtcQueueDateTime, + StartDateTime = executeResult.UtcStartDateTime, + EndDateTime = executeResult.UtcEndDateTime, RetryInfo = executeResult.RetryInfo, }; @@ -63,16 +63,16 @@ internal void InvokeWorkStoppedEvent(ExecuteResultBase executeResult) { executeResult.EndDateTime = DateTime.UtcNow; Interlocked.Increment(ref _endCount); - Interlocked.Add(ref _executeTime, (long)(executeResult.EndDateTime - executeResult.StartDateTime).TotalMilliseconds); + Interlocked.Add(ref _executeTime, (long)(executeResult.UtcEndDateTime - executeResult.UtcStartDateTime).TotalMilliseconds); if (WorkStopped != null) { WorkStoppedEventArgs e = new WorkStoppedEventArgs() { ID = executeResult.ID, ForceStop = executeResult.Status == Status.ForceStopped, - QueueDateTime = executeResult.QueueDateTime, - StartDateTime = executeResult.StartDateTime, - EndDateTime = executeResult.EndDateTime, + QueueDateTime = executeResult.UtcQueueDateTime, + StartDateTime = executeResult.UtcStartDateTime, + EndDateTime = executeResult.UtcEndDateTime, }; SafeInvoke(WorkStopped, e, ErrorFrom.WorkStopped, executeResult); } @@ -113,15 +113,15 @@ internal void InvokeWorkCanceledEvent(ExecuteResultBase executeResult) { executeResult.EndDateTime = DateTime.UtcNow; Interlocked.Increment(ref _endCount); - Interlocked.Add(ref _executeTime, (long)(executeResult.EndDateTime - executeResult.StartDateTime).TotalMilliseconds); + Interlocked.Add(ref _executeTime, (long)(executeResult.UtcEndDateTime - executeResult.UtcStartDateTime).TotalMilliseconds); if (WorkCanceled != null) { WorkCanceledEventArgs e = new WorkCanceledEventArgs() { ID = executeResult.ID, - QueueDateTime = executeResult.QueueDateTime, - StartDateTime = executeResult.StartDateTime, - EndDateTime = executeResult.EndDateTime, + QueueDateTime = executeResult.UtcQueueDateTime, + StartDateTime = executeResult.UtcStartDateTime, + EndDateTime = executeResult.UtcEndDateTime, }; SafeInvoke(WorkCanceled, e, ErrorFrom.WorkCanceled, executeResult); } diff --git a/PowerThreadPool/EventArguments/ErrorOccurredEventArgs.cs b/PowerThreadPool/EventArguments/ErrorOccurredEventArgs.cs index d89fd06..301ab34 100644 --- a/PowerThreadPool/EventArguments/ErrorOccurredEventArgs.cs +++ b/PowerThreadPool/EventArguments/ErrorOccurredEventArgs.cs @@ -41,9 +41,9 @@ public ErrorOccurredEventArgs(Exception exception, ErrorFrom errorFrom, ExecuteR if (executeResult != null) { ID = executeResult.ID; - QueueDateTime = executeResult.QueueDateTime; - StartDateTime = executeResult.StartDateTime; - EndDateTime = executeResult.EndDateTime; + QueueDateTime = executeResult.UtcQueueDateTime; + StartDateTime = executeResult.UtcStartDateTime; + EndDateTime = executeResult.UtcEndDateTime; } Exception = exception; ErrorFrom = errorFrom; diff --git a/PowerThreadPool/EventArguments/WorkEventArgsBase.cs b/PowerThreadPool/EventArguments/WorkEventArgsBase.cs index fbfa0d5..bc24956 100644 --- a/PowerThreadPool/EventArguments/WorkEventArgsBase.cs +++ b/PowerThreadPool/EventArguments/WorkEventArgsBase.cs @@ -11,19 +11,34 @@ public WorkEventArgsBase() { } /// public string ID { get; internal set; } + private DateTime _queueDateTime; /// - /// queue datetime. + /// Queue datetime. /// - public DateTime QueueDateTime { get; internal set; } + public DateTime QueueDateTime + { + get => _queueDateTime.ToLocalTime(); + internal set => _queueDateTime = value; + } + private DateTime _startDateTime; /// - /// start datetime. + /// Start datetime. /// - public DateTime StartDateTime { get; internal set; } + public DateTime StartDateTime + { + get => _startDateTime.ToLocalTime(); + internal set => _startDateTime = value; + } + private DateTime _endDateTime; /// - /// callback datetime. + /// End datetime. /// - public DateTime EndDateTime { get; internal set; } + public DateTime EndDateTime + { + get => _endDateTime.ToLocalTime(); + internal set => _endDateTime = value; + } } } diff --git a/PowerThreadPool/Results/ExecuteResult.cs b/PowerThreadPool/Results/ExecuteResult.cs index bdff898..a775d5f 100644 --- a/PowerThreadPool/Results/ExecuteResult.cs +++ b/PowerThreadPool/Results/ExecuteResult.cs @@ -51,7 +51,7 @@ internal override ExecuteResult ToTypedResult() Exception = Exception, Result = (TRes)(object)Result, ID = ID, - QueueDateTime = QueueDateTime + QueueDateTime = UtcQueueDateTime }; } return result; diff --git a/PowerThreadPool/Results/ExecuteResultBase.cs b/PowerThreadPool/Results/ExecuteResultBase.cs index ca94fe6..de909d1 100644 --- a/PowerThreadPool/Results/ExecuteResultBase.cs +++ b/PowerThreadPool/Results/ExecuteResultBase.cs @@ -31,6 +31,7 @@ public DateTime QueueDateTime get => _queueDateTime.ToLocalTime(); internal set => _queueDateTime = value; } + internal DateTime UtcQueueDateTime => _queueDateTime; private DateTime _startDateTime; /// @@ -41,6 +42,7 @@ public DateTime StartDateTime get => _startDateTime.ToLocalTime(); internal set => _startDateTime = value; } + internal DateTime UtcStartDateTime => _startDateTime; private DateTime _endDateTime; /// @@ -51,6 +53,7 @@ public DateTime EndDateTime get => _endDateTime.ToLocalTime(); internal set => _endDateTime = value; } + internal DateTime UtcEndDateTime => _endDateTime; /// /// Retry information. diff --git a/PowerThreadPool/Works/WorkBase.cs b/PowerThreadPool/Works/WorkBase.cs index 99dfab6..983a1a6 100644 --- a/PowerThreadPool/Works/WorkBase.cs +++ b/PowerThreadPool/Works/WorkBase.cs @@ -33,6 +33,9 @@ internal bool IsPausing internal bool ShouldStop { get; set; } internal bool DependencyFailed { get; set; } internal ManualResetEvent PauseSignal { get; set; } + /// + /// Queue datetime (UTC). + /// internal DateTime QueueDateTime { get; set; } internal abstract object Execute(); internal abstract bool Stop(bool forceStop);