IGNITE-8240 .NET: Use default scheduler when starting Tasks This closes #3812
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/44c4656c Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/44c4656c Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/44c4656c Branch: refs/heads/ignite-6083 Commit: 44c4656ce8cc304b0858a18438f57fd9daf9ecb0 Parents: 6df5f99 Author: Pavel Tupitsyn <ptupit...@apache.org> Authored: Fri Apr 13 12:28:19 2018 +0300 Committer: Pavel Tupitsyn <ptupit...@apache.org> Committed: Fri Apr 13 12:28:19 2018 +0300 ---------------------------------------------------------------------- .gitignore | 1 + .../IgniteSessionStateStoreProviderTest.cs | 7 +- .../Apache.Ignite.Benchmarks/BenchmarkRunner.cs | 1 - .../Binary/BinaryDynamicRegistrationTest.cs | 2 +- .../Cache/CacheAbstractTransactionalTest.cs | 5 +- .../Client/ClientConnectionTest.cs | 3 +- .../Apache.Ignite.Core.Tests/EventsTest.cs | 9 +-- .../Apache.Ignite.Core.Tests/ExceptionsTest.cs | 3 +- .../IgniteStartStopTest.cs | 5 +- .../Apache.Ignite.Core.Tests/MessagingTest.cs | 5 +- .../Apache.Ignite.Core.csproj | 1 + .../Impl/Client/ClientSocket.cs | 6 +- .../Impl/Common/TaskRunner.cs | 70 ++++++++++++++++++++ .../Impl/Datastream/DataStreamerBatch.cs | 2 +- .../Impl/Datastream/DataStreamerImpl.cs | 2 +- .../Apache.Ignite.Core/Impl/Events/Events.cs | 2 +- .../Impl/Transactions/TransactionImpl.cs | 3 +- 17 files changed, 103 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/.gitignore ---------------------------------------------------------------------- diff --git a/.gitignore b/.gitignore index 535a8ff..47220b2 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ git-patch-prop-local.sh **/dotnet/libs/ *.classname* *.exe +.mvn/ #Visual Studio files *.[Oo]bj http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.AspNet.Tests/IgniteSessionStateStoreProviderTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.AspNet.Tests/IgniteSessionStateStoreProviderTest.cs b/modules/platforms/dotnet/Apache.Ignite.AspNet.Tests/IgniteSessionStateStoreProviderTest.cs index 25700c6..08c44a6 100644 --- a/modules/platforms/dotnet/Apache.Ignite.AspNet.Tests/IgniteSessionStateStoreProviderTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.AspNet.Tests/IgniteSessionStateStoreProviderTest.cs @@ -28,6 +28,7 @@ namespace Apache.Ignite.AspNet.Tests using System.Web.SessionState; using Apache.Ignite.Core; using Apache.Ignite.Core.Common; + using Apache.Ignite.Core.Impl.Common; using Apache.Ignite.Core.Tests; using NUnit.Framework; @@ -265,7 +266,7 @@ namespace Apache.Ignite.AspNet.Tests Assert.AreEqual(SessionStateActions.None, actions); // Try to get it in a different thread. - Task.Factory.StartNew(() => + TaskRunner.Run(() => { object lockId1; // do not overwrite lockId res = provider.GetItem(HttpContext, Id, out locked, out lockAge, out lockId1, out actions); @@ -277,7 +278,7 @@ namespace Apache.Ignite.AspNet.Tests }).Wait(); // Try to get it in a different thread. - Task.Factory.StartNew(() => + TaskRunner.Run(() => { object lockId1; // do not overwrite lockId res = provider.GetItemExclusive(HttpContext, Id, out locked, out lockAge, out lockId1, out actions); @@ -292,7 +293,7 @@ namespace Apache.Ignite.AspNet.Tests provider.ReleaseItemExclusive(HttpContext, Id, lockId); // Make sure it is accessible in a different thread. - Task.Factory.StartNew(() => + TaskRunner.Run(() => { res = provider.GetItem(HttpContext, Id, out locked, out lockAge, out lockId, out actions); Assert.IsNotNull(res); http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Benchmarks/BenchmarkRunner.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Benchmarks/BenchmarkRunner.cs b/modules/platforms/dotnet/Apache.Ignite.Benchmarks/BenchmarkRunner.cs index e152ffb..fb2fbd2 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Benchmarks/BenchmarkRunner.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Benchmarks/BenchmarkRunner.cs @@ -22,7 +22,6 @@ namespace Apache.Ignite.Benchmarks using System.IO; using System.Text; using Apache.Ignite.Benchmarks.Interop; - using Apache.Ignite.Benchmarks.ThinClient; /// <summary> /// Benchmark runner. http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDynamicRegistrationTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDynamicRegistrationTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDynamicRegistrationTest.cs index e635bd1..272a0ca 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDynamicRegistrationTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Binary/BinaryDynamicRegistrationTest.cs @@ -399,7 +399,7 @@ namespace Apache.Ignite.Core.Tests.Binary }; var tasks = Enumerable.Range(0, threads) - .Select(x => Task.Factory.StartNew(registerType)) + .Select(x => TaskRunner.Run(registerType)) .ToArray(); Task.WaitAll(tasks); http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTransactionalTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTransactionalTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTransactionalTest.cs index 2602a02..3d0168c 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTransactionalTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTransactionalTest.cs @@ -25,6 +25,7 @@ namespace Apache.Ignite.Core.Tests.Cache using System.Transactions; using Apache.Ignite.Core.Cache; using Apache.Ignite.Core.Cache.Configuration; + using Apache.Ignite.Core.Impl.Common; using Apache.Ignite.Core.Transactions; using NUnit.Framework; @@ -563,8 +564,8 @@ namespace Apache.Ignite.Core.Tests.Cache var aex = Assert.Throws<AggregateException>(() => Task.WaitAll(new[] { - Task.Factory.StartNew(() => increment(keys0)), - Task.Factory.StartNew(() => increment(keys0.Reverse().ToArray())) + TaskRunner.Run(() => increment(keys0)), + TaskRunner.Run(() => increment(keys0.Reverse().ToArray())) }, TimeSpan.FromSeconds(40))); http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Client/ClientConnectionTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Client/ClientConnectionTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Client/ClientConnectionTest.cs index 2ea17a8..cb30f40 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Client/ClientConnectionTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Client/ClientConnectionTest.cs @@ -31,6 +31,7 @@ namespace Apache.Ignite.Core.Tests.Client using Apache.Ignite.Core.Client; using Apache.Ignite.Core.Client.Cache; using Apache.Ignite.Core.Configuration; + using Apache.Ignite.Core.Impl.Common; using NUnit.Framework; /// <summary> @@ -310,7 +311,7 @@ namespace Apache.Ignite.Core.Tests.Client var evt = new ManualResetEventSlim(); var ignite = Ignition.Start(TestUtils.GetTestConfiguration()); - var putGetTask = Task.Factory.StartNew(() => + var putGetTask = TaskRunner.Run(() => { using (var client = StartClient()) { http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Core.Tests/EventsTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/EventsTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/EventsTest.cs index a7c0534..e9bac02 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/EventsTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/EventsTest.cs @@ -34,6 +34,7 @@ namespace Apache.Ignite.Core.Tests using Apache.Ignite.Core.Common; using Apache.Ignite.Core.Events; using Apache.Ignite.Core.Impl; + using Apache.Ignite.Core.Impl.Common; using Apache.Ignite.Core.Impl.Events; using Apache.Ignite.Core.Resource; using Apache.Ignite.Core.Tests.Compute; @@ -385,14 +386,14 @@ namespace Apache.Ignite.Core.Tests /// </summary> private static IEnumerable<Func<IEventFilter<IEvent>, int[], Task<IEvent>>> GetWaitTasks(IEvents events) { - yield return (filter, types) => Task.Factory.StartNew(() => events.WaitForLocal(types)); - yield return (filter, types) => Task.Factory.StartNew(() => events.WaitForLocal(types.ToList())); + yield return (filter, types) => TaskRunner.Run(() => events.WaitForLocal(types)); + yield return (filter, types) => TaskRunner.Run(() => events.WaitForLocal(types.ToList())); yield return (filter, types) => events.WaitForLocalAsync(types); yield return (filter, types) => events.WaitForLocalAsync(types.ToList()); - yield return (filter, types) => Task.Factory.StartNew(() => events.WaitForLocal(filter, types)); - yield return (filter, types) => Task.Factory.StartNew(() => events.WaitForLocal(filter, types.ToList())); + yield return (filter, types) => TaskRunner.Run(() => events.WaitForLocal(filter, types)); + yield return (filter, types) => TaskRunner.Run(() => events.WaitForLocal(filter, types.ToList())); yield return (filter, types) => events.WaitForLocalAsync(filter, types); yield return (filter, types) => events.WaitForLocalAsync(filter, types.ToList()); http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ExceptionsTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ExceptionsTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ExceptionsTest.cs index f7568ef..0b06ea3 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ExceptionsTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/ExceptionsTest.cs @@ -29,6 +29,7 @@ namespace Apache.Ignite.Core.Tests using Apache.Ignite.Core.Cluster; using Apache.Ignite.Core.Common; using Apache.Ignite.Core.Compute; + using Apache.Ignite.Core.Impl.Common; using Apache.Ignite.Core.Services; using Apache.Ignite.Core.Transactions; using NUnit.Framework; @@ -348,7 +349,7 @@ namespace Apache.Ignite.Core.Tests cache = cache.WithKeepBinary<TK, int>(); // Do cache puts in parallel - var putTask = Task.Factory.StartNew(() => + var putTask = TaskRunner.Run(() => { try { http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteStartStopTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteStartStopTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteStartStopTest.cs index 792b33d..f9c1cad 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteStartStopTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteStartStopTest.cs @@ -23,6 +23,7 @@ namespace Apache.Ignite.Core.Tests using System.Threading; using System.Threading.Tasks; using Apache.Ignite.Core.Common; + using Apache.Ignite.Core.Impl.Common; using Apache.Ignite.Core.Messaging; using Apache.Ignite.Core.Tests.Process; using NUnit.Framework; @@ -207,7 +208,7 @@ namespace Apache.Ignite.Core.Tests if (i % 2 == 0) // Try to stop ignite from another thread. { - Task.Factory.StartNew(() => grid.Dispose()).Wait(); + TaskRunner.Run(() => grid.Dispose()).Wait(); } else { @@ -306,7 +307,7 @@ namespace Apache.Ignite.Core.Tests // Spam message subscriptions on a separate thread // to test race conditions during processor init on remote node - var listenTask = Task.Factory.StartNew(() => + var listenTask = TaskRunner.Run(() => { var filter = new MessageListener(); http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Core.Tests/MessagingTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/MessagingTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/MessagingTest.cs index e644e31..7db4eef 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/MessagingTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/MessagingTest.cs @@ -27,6 +27,7 @@ namespace Apache.Ignite.Core.Tests using Apache.Ignite.Core.Cache.Configuration; using Apache.Ignite.Core.Cluster; using Apache.Ignite.Core.Common; + using Apache.Ignite.Core.Impl.Common; using Apache.Ignite.Core.Messaging; using Apache.Ignite.Core.Resource; using Apache.Ignite.Core.Tests.Cache; @@ -252,7 +253,7 @@ namespace Apache.Ignite.Core.Tests var messaging = _grid1.GetMessaging(); - var senders = Task.Factory.StartNew(() => TestUtils.RunMultiThreaded(() => + var senders = TaskRunner.Run(() => TestUtils.RunMultiThreaded(() => { messaging.Send(NextMessage()); Thread.Sleep(50); @@ -423,7 +424,7 @@ namespace Apache.Ignite.Core.Tests var messaging = _grid1.GetMessaging(); - var senders = Task.Factory.StartNew(() => TestUtils.RunMultiThreaded(() => + var senders = TaskRunner.Run(() => TestUtils.RunMultiThreaded(() => { MessagingTestHelper.ClearReceived(int.MaxValue); messaging.Send(NextMessage()); http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj b/modules/platforms/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj index ec84a38..93c45c3 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Apache.Ignite.Core.csproj @@ -72,6 +72,7 @@ <Compile Include="Client\IgniteClientException.cs" /> <Compile Include="Client\IIgniteClient.cs" /> <Compile Include="Common\ExceptionFactory.cs" /> + <Compile Include="Impl\Common\TaskRunner.cs" /> <Compile Include="Ssl\ISslContextFactory.cs" /> <Compile Include="Configuration\Package-Info.cs" /> <Compile Include="Configuration\ClientConnectorConfiguration.cs" /> http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/ClientSocket.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/ClientSocket.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/ClientSocket.cs index 27d8f0b..bce681f 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/ClientSocket.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/ClientSocket.cs @@ -28,11 +28,11 @@ namespace Apache.Ignite.Core.Impl.Client using System.Net.Sockets; using System.Threading; using System.Threading.Tasks; - using System.Xml.Schema; using Apache.Ignite.Core.Client; using Apache.Ignite.Core.Common; using Apache.Ignite.Core.Impl.Binary; using Apache.Ignite.Core.Impl.Binary.IO; + using Apache.Ignite.Core.Impl.Common; /// <summary> /// Wrapper over framework socket for Ignite thin client operations. @@ -117,7 +117,7 @@ namespace Apache.Ignite.Core.Impl.Client } // Continuously and asynchronously wait for data from server. - Task.Factory.StartNew(WaitForMessages); + TaskRunner.Run(WaitForMessages); } /// <summary> @@ -174,7 +174,7 @@ namespace Apache.Ignite.Core.Impl.Client var task = SendRequestAsync(ref reqMsg); // Decode. - return task.ContinueWith(responseTask => DecodeResponse(responseTask.Result, readFunc, errorFunc)); + return task.ContWith(responseTask => DecodeResponse(responseTask.Result, readFunc, errorFunc)); } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/TaskRunner.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/TaskRunner.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/TaskRunner.cs new file mode 100644 index 0000000..51a7c6a --- /dev/null +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Common/TaskRunner.cs @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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. + */ + +namespace Apache.Ignite.Core.Impl.Common +{ + using System; + using System.Threading; + using System.Threading.Tasks; + + /// <summary> + /// Extensions for <see cref="Task"/> classes. + /// Fixes the issue with <see cref="TaskScheduler.Current"/> being used by defaut by system APIs. + /// </summary> + internal static class TaskRunner + { + /// <summary> + /// ContinueWith using default scheduler. + /// </summary> + public static Task<TNewResult> ContWith<TResult, TNewResult>(this Task<TResult> task, + Func<Task<TResult>, TNewResult> continuationFunction) + { + IgniteArgumentCheck.NotNull(task, "task"); + + return task.ContinueWith(continuationFunction, TaskScheduler.Default); + } + + /// <summary> + /// ContinueWith using default scheduler. + /// </summary> + public static Task ContWith(this Task task, + Action<Task> continuationFunction) + { + IgniteArgumentCheck.NotNull(task, "task"); + + return task.ContinueWith(continuationFunction, TaskScheduler.Default); + } + + /// <summary> + /// Run new task using default scheduler. + /// </summary> + public static Task Run(Action action) + { + return Task.Factory.StartNew(action, CancellationToken.None, TaskCreationOptions.None, + TaskScheduler.Default); + } + + /// <summary> + /// Run new task using default scheduler. + /// </summary> + public static Task<TResult> Run<TResult>(Func<TResult> func) + { + return Task.Factory.StartNew(func, CancellationToken.None, TaskCreationOptions.None, + TaskScheduler.Default); + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Datastream/DataStreamerBatch.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Datastream/DataStreamerBatch.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Datastream/DataStreamerBatch.cs index 38a8ea8..0026701 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Datastream/DataStreamerBatch.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Datastream/DataStreamerBatch.cs @@ -69,7 +69,7 @@ namespace Apache.Ignite.Core.Impl.Datastream if (prev != null) Thread.MemoryBarrier(); // Prevent "prev" field escape. - _fut.Task.ContinueWith(x => ParentsCompleted()); + _fut.Task.ContWith(x => ParentsCompleted()); } /// <summary> http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Datastream/DataStreamerImpl.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Datastream/DataStreamerImpl.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Datastream/DataStreamerImpl.cs index 555c6e6..7aaa84a 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Datastream/DataStreamerImpl.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Datastream/DataStreamerImpl.cs @@ -897,7 +897,7 @@ namespace Apache.Ignite.Core.Impl.Datastream /// </summary> public void RunThread() { - Task.Factory.StartNew(Run); + TaskRunner.Run(Run); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Events/Events.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Events/Events.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Events/Events.cs index a81523a..04cc210 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Events/Events.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Events/Events.cs @@ -241,7 +241,7 @@ namespace Apache.Ignite.Core.Impl.Events if (hnd != null) { // Dispose handle as soon as future ends. - task.ContinueWith(x => Ignite.HandleRegistry.Release(hnd.Value)); + task.ContWith(x => Ignite.HandleRegistry.Release(hnd.Value)); } return task; http://git-wip-us.apache.org/repos/asf/ignite/blob/44c4656c/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionImpl.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionImpl.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionImpl.cs index 0b04a68..c800859 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionImpl.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Transactions/TransactionImpl.cs @@ -21,6 +21,7 @@ namespace Apache.Ignite.Core.Impl.Transactions using System.Globalization; using System.Threading; using System.Threading.Tasks; + using Apache.Ignite.Core.Impl.Common; using Apache.Ignite.Core.Transactions; /// <summary> @@ -457,7 +458,7 @@ namespace Apache.Ignite.Core.Impl.Transactions /// </summary> private Task CloseWhenComplete(Task task) { - return task.ContinueWith(x => Close()); + return task.ContWith(x => Close()); } /** <inheritdoc /> */