Skip to content

Commit f287414

Browse files
committed
Avoiding non-observed Task exceptions
1 parent 317bee0 commit f287414

File tree

4 files changed

+15
-16
lines changed

4 files changed

+15
-16
lines changed

src/net45/WampSharp/WAMP2/V2/Client/Session/IWampSessionClientExtended.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ internal interface IWampSessionClientExtended :
1414

1515
Task OpenTask { get; }
1616

17-
Task<GoodbyeMessage> CloseTask { get; }
18-
19-
void Close(string reason, GoodbyeDetails details);
17+
Task<GoodbyeMessage> Close(string reason, GoodbyeDetails details);
2018

2119
void OnConnectionOpen();
2220
void OnConnectionClosed();

src/net45/WampSharp/WAMP2/V2/Client/Session/WampSessionClient.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class WampSessionClient<TMessage> : IWampSessionClientExtended,
1616
private static readonly AuthenticateExtraData EmptyAuthenticateDetails = new AuthenticateExtraData();
1717
private readonly IWampServerProxy mServerProxy;
1818
private TaskCompletionSource<bool> mOpenTask = new TaskCompletionSource<bool>();
19-
private TaskCompletionSource<GoodbyeMessage> mCloseTask = new TaskCompletionSource<GoodbyeMessage>();
19+
private TaskCompletionSource<GoodbyeMessage> mCloseTask;
2020
private readonly IWampFormatter<TMessage> mFormatter;
2121
private bool mGoodbyeSent;
2222
private readonly IWampClientAuthenticator mAuthenticator;
@@ -118,7 +118,7 @@ public void Goodbye(GoodbyeDetails details, string reason)
118118
else
119119
{
120120
GoodbyeMessage message = new GoodbyeMessage(){Details = details, Reason = reason};
121-
mCloseTask.SetResult(message);
121+
mCloseTask?.SetResult(message);
122122
}
123123
}
124124

@@ -135,7 +135,7 @@ private void RaiseConnectionBroken()
135135

136136
Interlocked.CompareExchange(ref mIsConnected, 0, 1);
137137
mOpenTask = new TaskCompletionSource<bool>();
138-
mCloseTask = new TaskCompletionSource<GoodbyeMessage>();
138+
mCloseTask = null;
139139
mCloseEventArgs = null;
140140

141141
OnConnectionBroken(closeEventArgs);
@@ -160,15 +160,20 @@ private void TrySetCloseEventArgs(SessionCloseType sessionCloseType,
160160

161161
public Task OpenTask => mOpenTask.Task;
162162

163-
public Task<GoodbyeMessage> CloseTask => mCloseTask.Task;
164-
165-
public void Close(string reason, GoodbyeDetails details)
163+
public Task<GoodbyeMessage> Close(string reason, GoodbyeDetails details)
166164
{
167165
reason = reason ?? WampErrors.CloseNormal;
168166
details = details ?? EmptyGoodbyeDetails;
169167

168+
TaskCompletionSource<GoodbyeMessage> closeTask =
169+
new TaskCompletionSource<GoodbyeMessage>();
170+
171+
mCloseTask = closeTask;
172+
170173
mGoodbyeSent = true;
171174
mServerProxy.Goodbye(details, reason);
175+
176+
return closeTask.Task;
172177
}
173178

174179
public void OnConnectionOpen()

src/net45/WampSharp/WAMP2/V2/Client/WampChannel.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,7 @@ public void Close()
7373

7474
public Task<GoodbyeMessage> Close(string reason, GoodbyeDetails details)
7575
{
76-
Task<GoodbyeMessage> task = mClient.CloseTask;
77-
mClient.Close(reason, details);
78-
return task;
76+
return mClient.Close(reason, details);
7977
}
8078
}
8179
}

src/net45/WampSharp/WAMP2/V2/Client/WampClient.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,6 @@ public WampClient(IWampRealmProxyFactory<TMessage> realmFactory)
5757

5858
public Task OpenTask => SessionClient.OpenTask;
5959

60-
public Task<GoodbyeMessage> CloseTask => SessionClient.CloseTask;
61-
6260
public void Challenge(string authMethod, ChallengeDetails extra)
6361
{
6462
SessionClient.Challenge(authMethod, extra);
@@ -81,9 +79,9 @@ public void Goodbye(GoodbyeDetails details, string reason)
8179

8280
public long Session => SessionClient.Session;
8381

84-
public void Close(string reason, GoodbyeDetails details)
82+
public Task<GoodbyeMessage> Close(string reason, GoodbyeDetails details)
8583
{
86-
SessionClient.Close(reason, details);
84+
return SessionClient.Close(reason, details);
8785
}
8886

8987
public void OnConnectionOpen()

0 commit comments

Comments
 (0)