@@ -10,19 +10,27 @@ namespace AMWD.Protocols.Modbus.Common.Contracts
10
10
/// <summary>
11
11
/// Base implementation of a Modbus client.
12
12
/// </summary>
13
- public abstract class ModbusClientBase : IDisposable
13
+ /// <remarks>
14
+ /// Initializes a new instance of the <see cref="ModbusClientBase"/> class with a specific <see cref="IModbusConnection"/>.
15
+ /// </remarks>
16
+ /// <param name="connection">The <see cref="IModbusConnection"/> responsible for invoking the requests.</param>
17
+ /// <param name="disposeConnection">
18
+ /// <see langword="true"/> if the connection should be disposed of by Dispose(),
19
+ /// <see langword="false"/> otherwise if you inted to reuse the connection.
20
+ /// </param>
21
+ public abstract class ModbusClientBase ( IModbusConnection connection , bool disposeConnection ) : IDisposable
14
22
{
15
23
private bool _isDisposed ;
16
24
17
25
/// <summary>
18
26
/// Gets or sets a value indicating whether the connection should be disposed of by <see cref="Dispose()"/>.
19
27
/// </summary>
20
- protected readonly bool disposeConnection ;
28
+ protected readonly bool disposeConnection = disposeConnection ;
21
29
22
30
/// <summary>
23
31
/// Gets or sets the <see cref="IModbusConnection"/> responsible for invoking the requests.
24
32
/// </summary>
25
- protected readonly IModbusConnection connection ;
33
+ protected readonly IModbusConnection connection = connection ?? throw new ArgumentNullException ( nameof ( connection ) ) ;
26
34
27
35
/// <summary>
28
36
/// Initializes a new instance of the <see cref="ModbusClientBase"/> class with a specific <see cref="IModbusConnection"/>.
@@ -32,20 +40,6 @@ public ModbusClientBase(IModbusConnection connection)
32
40
: this ( connection , true )
33
41
{ }
34
42
35
- /// <summary>
36
- /// Initializes a new instance of the <see cref="ModbusClientBase"/> class with a specific <see cref="IModbusConnection"/>.
37
- /// </summary>
38
- /// <param name="connection">The <see cref="IModbusConnection"/> responsible for invoking the requests.</param>
39
- /// <param name="disposeConnection">
40
- /// <see langword="true"/> if the connection should be disposed of by Dispose(),
41
- /// <see langword="false"/> otherwise if you inted to reuse the connection.
42
- /// </param>
43
- public ModbusClientBase ( IModbusConnection connection , bool disposeConnection )
44
- {
45
- this . connection = connection ?? throw new ArgumentNullException ( nameof ( connection ) ) ;
46
- this . disposeConnection = disposeConnection ;
47
- }
48
-
49
43
/// <summary>
50
44
/// Gets or sets the protocol type to use.
51
45
/// </summary>
@@ -67,7 +61,7 @@ public virtual async Task<IReadOnlyList<Coil>> ReadCoilsAsync(byte unitId, ushor
67
61
Assertions ( ) ;
68
62
69
63
var request = Protocol . SerializeReadCoils ( unitId , startAddress , count ) ;
70
- var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) ;
64
+ var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) . ConfigureAwait ( continueOnCapturedContext : false ) ;
71
65
Protocol . ValidateResponse ( request , response ) ;
72
66
73
67
// The protocol processes complete bytes from the response.
@@ -92,7 +86,7 @@ public virtual async Task<IReadOnlyList<DiscreteInput>> ReadDiscreteInputsAsync(
92
86
Assertions ( ) ;
93
87
94
88
var request = Protocol . SerializeReadDiscreteInputs ( unitId , startAddress , count ) ;
95
- var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) ;
89
+ var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) . ConfigureAwait ( continueOnCapturedContext : false ) ;
96
90
Protocol . ValidateResponse ( request , response ) ;
97
91
98
92
// The protocol processes complete bytes from the response.
@@ -117,7 +111,7 @@ public virtual async Task<IReadOnlyList<HoldingRegister>> ReadHoldingRegistersAs
117
111
Assertions ( ) ;
118
112
119
113
var request = Protocol . SerializeReadHoldingRegisters ( unitId , startAddress , count ) ;
120
- var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) ;
114
+ var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) . ConfigureAwait ( continueOnCapturedContext : false ) ;
121
115
Protocol . ValidateResponse ( request , response ) ;
122
116
123
117
var holdingRegisters = Protocol . DeserializeReadHoldingRegisters ( response ) . ToList ( ) ;
@@ -140,7 +134,7 @@ public virtual async Task<IReadOnlyList<InputRegister>> ReadInputRegistersAsync(
140
134
Assertions ( ) ;
141
135
142
136
var request = Protocol . SerializeReadInputRegisters ( unitId , startAddress , count ) ;
143
- var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) ;
137
+ var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) . ConfigureAwait ( continueOnCapturedContext : false ) ;
144
138
Protocol . ValidateResponse ( request , response ) ;
145
139
146
140
var inputRegisters = Protocol . DeserializeReadInputRegisters ( response ) . ToList ( ) ;
@@ -184,7 +178,7 @@ public virtual async Task<DeviceIdentification> ReadDeviceIdentificationAsync(by
184
178
do
185
179
{
186
180
var request = Protocol . SerializeReadDeviceIdentification ( unitId , category , requestObjectId ) ;
187
- var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) ;
181
+ var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) . ConfigureAwait ( continueOnCapturedContext : false ) ;
188
182
Protocol . ValidateResponse ( request , response ) ;
189
183
190
184
result = Protocol . DeserializeReadDeviceIdentification ( response ) ;
@@ -247,7 +241,7 @@ public virtual async Task<bool> WriteSingleCoilAsync(byte unitId, Coil coil, Can
247
241
Assertions ( ) ;
248
242
249
243
var request = Protocol . SerializeWriteSingleCoil ( unitId , coil ) ;
250
- var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) ;
244
+ var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) . ConfigureAwait ( continueOnCapturedContext : false ) ;
251
245
Protocol . ValidateResponse ( request , response ) ;
252
246
253
247
var result = Protocol . DeserializeWriteSingleCoil ( response ) ;
@@ -268,7 +262,7 @@ public virtual async Task<bool> WriteSingleHoldingRegisterAsync(byte unitId, Hol
268
262
Assertions ( ) ;
269
263
270
264
var request = Protocol . SerializeWriteSingleHoldingRegister ( unitId , register ) ;
271
- var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) ;
265
+ var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) . ConfigureAwait ( continueOnCapturedContext : false ) ;
272
266
Protocol . ValidateResponse ( request , response ) ;
273
267
274
268
var result = Protocol . DeserializeWriteSingleHoldingRegister ( response ) ;
@@ -289,7 +283,7 @@ public virtual async Task<bool> WriteMultipleCoilsAsync(byte unitId, IReadOnlyLi
289
283
Assertions ( ) ;
290
284
291
285
var request = Protocol . SerializeWriteMultipleCoils ( unitId , coils ) ;
292
- var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) ;
286
+ var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) . ConfigureAwait ( continueOnCapturedContext : false ) ;
293
287
Protocol . ValidateResponse ( request , response ) ;
294
288
295
289
var ( firstAddress , count ) = Protocol . DeserializeWriteMultipleCoils ( response ) ;
@@ -309,7 +303,7 @@ public virtual async Task<bool> WriteMultipleHoldingRegistersAsync(byte unitId,
309
303
Assertions ( ) ;
310
304
311
305
var request = Protocol . SerializeWriteMultipleHoldingRegisters ( unitId , registers ) ;
312
- var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) ;
306
+ var response = await connection . InvokeAsync ( request , Protocol . CheckResponseComplete , cancellationToken ) . ConfigureAwait ( continueOnCapturedContext : false ) ;
313
307
Protocol . ValidateResponse ( request , response ) ;
314
308
315
309
var ( firstAddress , count ) = Protocol . DeserializeWriteMultipleHoldingRegisters ( response ) ;
0 commit comments