Skip to content

Commit 8ec5de2

Browse files
committed
告诉开发者属性只能用在对象创建
1 parent 9769a06 commit 8ec5de2

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

AsyncWorkerCollection/AsyncTaskQueue_/AsyncTaskQueue.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public AsyncTaskQueue()
5050
/// <typeparam name="T"></typeparam>
5151
/// <param name="func"></param>
5252
/// <returns></returns>
53+
// ReSharper disable once UnusedTypeParameter
5354
public async Task<bool> ExecuteAsync<T>(Func<Task> func)
5455
{
5556
var task = GetExecutableTask(func);
@@ -94,7 +95,7 @@ private AwaitableTask<TResult> GetExecutableTask<TResult>(Func<TResult> function
9495
private void AddPendingTaskToQueue(AwaitableTask task)
9596
{
9697
//添加队列,加锁。
97-
lock (_queue)
98+
lock (Locker)
9899
{
99100
_queue.Enqueue(task);
100101
//开始执行任务
@@ -205,13 +206,30 @@ private void Dispose(bool disposing)
205206
public bool UseSingleThread { get; set; } = true;
206207

207208
/// <summary>
208-
/// 自动取消以前的任务
209+
/// 自动取消以前的任务,此属性应该是在创建对象完成之后给定,不允许在任务执行过程中更改
209210
/// </summary>
210-
public bool AutoCancelPreviousTask { get; set; } = false;
211+
/// 设置和获取不需要加上锁,因为这是原子的,业务上也不会有开发者不断修改这个值。也就是说这个属性只有在对象创建就给定
212+
public bool AutoCancelPreviousTask
213+
{
214+
get => _autoCancelPreviousTask;
215+
set
216+
{
217+
if (_lastDoingTask != null)
218+
{
219+
// 仅用于开发时告诉开发者,在任务开始之后调用是不对的
220+
throw new InvalidOperationException($"此属性应该是在创建对象完成之后给定,不允许在任务执行过程中更改");
221+
}
222+
223+
_autoCancelPreviousTask = value;
224+
}
225+
}
211226

227+
private object Locker => _queue;
212228
private bool _isDisposed;
213229
private readonly ConcurrentQueue<AwaitableTask> _queue = new ConcurrentQueue<AwaitableTask>();
214230
private readonly AsyncAutoResetEvent _autoResetEvent;
231+
// ReSharper disable once RedundantDefaultMemberInitializer
232+
private bool _autoCancelPreviousTask = false;
215233

216234
#endregion
217235
}

0 commit comments

Comments
 (0)