I would like to test a task that is supposed to run continuously until killed. Suppose the following method is being tested:

```cs
public class Worker
{
  public async Task Run(CancellationToken cancellationToken)
  {
    while (!cancellationToken.IsCancellationRequested)
    {
      try
      {
        // do something like claim a resource
      }
      catch (Exception e)
      {
        // catch exceptions and print to the log
      }
      finally
      {
        // release the resource
      }
    }
  }
}

```

And a test case 

```cs
[TestCase]
public async System.Threading.Tasks.Task Run_ShallAlwaysReleaseResources()
{
  // Act
  await domainStateSerializationWorker.Run(new CancellationToken());  

  // Assert
  // assert that resource release has been called
}

```

The problem is that the task never terminates, because cancellation is never requested. Ultimately I would like to create a `CancellationToken` stub like `MockRepository.GenerateStub<CancellationToken>()` and tell it on which call to `IsCancellationRequested` return `true`, but `CancellationToken` is not a reference type so it is not possible.

So the question is how to make a test where `Run` executes for `n` iterations and then terminates? Is it possible without refactoring `Run`?