 <p>You could use the version of the <code>Task</code> <a href="https://msdn.microsoft.com/en-us/library/dd783035%28v=vs.110%29.aspx" rel="nofollow">constructor</a> that takes an <code>Action&lt;Object&gt;</code> parameter so you can pass the required input arguments, including the cancellation token, to the method executed by the task.</p> <p>Example:</p> <pre><code>ref class Test { public: void Loop() { auto tokenSource = gcnew CancellationTokenSource(); auto token = tokenSource-&gt;Token; int i = 0, max = 100; while (i &lt; max) { auto tuple = gcnew tuple_t(i, token); auto newtask = gcnew Task(gcnew Action&lt;Object^&gt;(this, &amp;Test::DoSomething), tuple, token); newtask-&gt;Start(); i++; } } void DoSomething(Object^ state) { auto tuple = static_cast&lt;tuple_t^&gt;(state); int data = tuple-&gt;Item1; CancellationToken token = tuple-&gt;Item2; // ... } private: typedef Tuple&lt;int, CancellationToken&gt; tuple_t; }; </code></pre>