Issue: A task may only be disposed if it is in a completion state

Hi,
Tried to upgrade to the latest canary release. I am getting the following error:

A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).

I’m running duplicati with the default Docker image and rclone backend. Docker-compose as follows:

  duplicati:
    deploy:
      resources:
        limits:
          memory: 1GB
          cpus: '2'
    image: duplicati/duplicati:2.1.0.117
    container_name: duplicati
    environment:
      - TZ=Europe/Brussels
      - DUPLICATI__WEBSERVICE_ALLOWED_HOSTNAMES=**redacted**
    volumes:
      - **redacted**
      - duplicati-data:/data/Duplicati/ #/opt/duplicati/data/ #/data/Duplicati/
      - duplicati-rclone:/data/rclone/
      - /volume1:/volume1
    ports:
      - 8200:8200
    restart: no
    hostname: duplicati-odroid

I have tried to pinpoint which release introduced the issue, but for some reason I can’t start some of the older canary releases. I am upgrading from 2.1.0.110 which is working OK. [edit]: 111 was not working [/edit]

Full error message:

System.InvalidOperationException: A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).
   at System.Threading.Tasks.Task.Dispose(Boolean disposing)
   at System.Threading.Tasks.Task.Dispose()
   at Duplicati.Library.Backend.Rclone.RcloneCommandExecuter(String command, String arguments, TimeSpan timeout, CancellationToken cancelToken)
   at Duplicati.Library.Backend.Rclone.ListAsync(CancellationToken cancelToken)+MoveNext()
   at Duplicati.Library.Backend.Rclone.ListAsync(CancellationToken cancelToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
   at System.Linq.AsyncEnumerable.<ToListAsync>g__Core|424_0[TSource](IAsyncEnumerable`1 source, CancellationToken cancellationToken) in /_/Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToList.cs:line 36
   at System.Linq.AsyncEnumerable.<ToListAsync>g__Core|424_0[TSource](IAsyncEnumerable`1 source, CancellationToken cancellationToken) in /_/Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToList.cs:line 36
   at Duplicati.Library.Main.Backend.BackendManager.ListOperation.ExecuteAsync(IBackend backend, CancellationToken cancelToken)
   at Duplicati.Library.Main.Backend.BackendManager.Handler.Execute[TResult](PendingOperation`1 op, CancellationToken cancellationToken)
   at Duplicati.Library.Main.Backend.BackendManager.Handler.Execute(PendingOperationBase op, CancellationToken cancellationToken)
   at Duplicati.Library.Main.Backend.BackendManager.Handler.ExecuteWithRetry(PendingOperationBase op, CancellationToken cancellationToken)
   at Duplicati.Library.Main.Backend.BackendManager.ListAsync(CancellationToken cancelToken)
   at Duplicati.Library.Main.Operation.FilelistProcessor.RemoteListAnalysis(IBackendManager backendManager, Options options, LocalDatabase database, IDbTransaction transaction, IBackendWriter log, IEnumerable`1 protectedFiles, IEnumerable`1 strictExcemptFiles, VerifyMode verifyMode)
   at Duplicati.Library.Main.Operation.FilelistProcessor.VerifyRemoteList(IBackendManager backend, Options options, LocalDatabase database, IDbTransaction transaction, IBackendWriter log, IEnumerable`1 protectedFiles, IEnumerable`1 strictExcemptFiles, Boolean logErrors, VerifyMode verifyMode)
   at Duplicati.Library.Main.Operation.BackupHandler.PreBackupVerify(Options options, BackupResults result, IBackendManager backendManager)
   at Duplicati.Library.Main.Operation.BackupHandler.RunAsync(String[] sources, IBackendManager backendManager, IFilter filter)
   at Duplicati.Library.Main.Controller.<>c__DisplayClass23_0.<<Backup>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at Duplicati.Library.Utility.Utility.Await(Task task)
   at Duplicati.Library.Main.Controller.RunAction[T](T result, String[]& paths, IFilter& filter, Func`3 method)
   at Duplicati.Library.Main.Controller.Backup(String[] inputsources, IFilter filter)
   at Duplicati.Server.Runner.Run(IRunnerData data, Boolean fromQueue)

Thanks for that, makes it very easy to find the issue.

I have a fix ready.