Skip to content

RAN015 CancelPrevious with a body that ignores its token

hint RAN015: This async memo's body ignores its CancellationToken, so CancelPrevious cancels nothing and acts as KeepLatest.

Cause. createAsyncWithPolicy CancelPrevious cancels the token of a superseded flight. A body that never reads the token runs every flight to the end, so the policy acts as KeepLatest. The rule reports a literal CancelPrevious policy whose compute names its token _ or never uses it.

Fix. Pass the token to the awaited work, or use KeepLatest.

Triggers

module Example

open System.Threading.Tasks
open Ranvier

let search () =
    createAsyncWithPolicy FlightPolicy.CancelPrevious (fun _ _ -> Task.Delay(100).ContinueWith (fun _ -> 1))

Fixed

module Example

open System.Threading.Tasks
open Ranvier

let search () =
    createAsyncWithPolicy FlightPolicy.CancelPrevious (fun _ token -> Task.Delay(100, token).ContinueWith (fun _ -> 1))

Suppression. // fsharpanalyzer: ignore-line RAN015, with the reason on the line before.

Edit this page