Skip to content

Commit

Permalink
Fixes so that conn.unsubscribe does not return null (#347)
Browse files Browse the repository at this point in the history
Extracts CompletedTask and uses a completed task instead of null.
  • Loading branch information
danielwertheim authored and ColinSullivan1 committed Nov 27, 2019
1 parent ef2da96 commit 0d73ef1
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 16 deletions.
20 changes: 4 additions & 16 deletions src/NATS.Client/Conn.cs
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,6 @@ internal enum ClientProtcolVersion
// interfaces.
public class Connection : IConnection, IDisposable
{
#if NET45
private static readonly Task CompletedTask = Task.FromResult(true);
#endif

Statistics stats = new Statistics();

// NOTE: We aren't using Mutex here to support enterprises using
Expand Down Expand Up @@ -3453,23 +3449,15 @@ public IAsyncSubscription SubscribeAsync(string subject, string queue, EventHand
// Use Subscription.Unsubscribe()
internal Task unsubscribe(Subscription sub, int max, bool drain, int timeout)
{
#if NET45
var task = CompletedTask;
#else
var task = Task.CompletedTask;
#endif
var task = CompletedTask.Get();

lock (mu)
{
if (isClosed())
throw new NATSConnectionClosedException();

Subscription s;
if (!subs.TryGetValue(sub.sid, out s)
|| s == null)
{
// already unsubscribed
return null;
}
if (!subs.TryGetValue(sub.sid, out var s) || s == null)
return task;

if (max > 0)
{
Expand Down
30 changes: 30 additions & 0 deletions src/NATS.Client/Internals/CompletedTask.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// Copyright 2015-2018 The NATS Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

using System.Threading.Tasks;

namespace NATS.Client.Internals
{
internal static class CompletedTask
{
#if NET45
private static readonly Task Completed = Task.FromResult(true);
#endif
internal static Task Get() =>
#if NET45
Completed;
#else
Task.CompletedTask;
#endif
}
}

0 comments on commit 0d73ef1

Please sign in to comment.