Skip to content

task defined as top-level static value doesn't get statically compiled #12038

@dsyme

Description

@dsyme

Most the time tasks are defined in functions, e.g.

let f() = task { return 1 }

That's fine, however if you define a task as a top-level value (e.g. in F# Interactive) you get a warning that a dynamic task implementation is used:

> task { return 1 };;

  task { return 1 };;
  ^^^^

stdin(2,1): warning FS3511: This state machine is not statically compilable. A resumable code invocation at '(2,0--2,4)' could not be reduced. An alternative dynamic implementation will be used, which may be slower. Consider adjusting your code to ensure this state machine is statically compilable, or else suppress this warning.

It's not a super-critical show-stopping bug because

  1. the task still runs correctly
  2. it's rare to define tasks like this in project code (however it may happen a lot in notebooks)
  3. tasks at the top-level like this are never perf-critical

Metadata

Metadata

Assignees

Labels

Area-Compiler-StateMachinesSequence, list, task and other state machine compilationBugImpact-Medium(Internal MS Team use only) Describes an issue with moderate impact on existing code.

Type

Projects

Status

New

Relationships

None yet

Development

No branches or pull requests

Issue actions