diff --git a/docs/release-notes/.FSharp.Core/9.0.300.md b/docs/release-notes/.FSharp.Core/9.0.300.md
index 3b2fdab5cfe..d730ff12486 100644
--- a/docs/release-notes/.FSharp.Core/9.0.300.md
+++ b/docs/release-notes/.FSharp.Core/9.0.300.md
@@ -3,6 +3,7 @@
### Added
* Added nullability annotations to `.Using` builder method for `async` and `task` builders ([PR #18292](https://github.com/dotnet/fsharp/pull/18292))
+* Support for `and!` in `TaskBuilder` ([LanguageSuggestion #1363](https://github.com/fsharp/fslang-suggestions/issues/1363), [PR #18451](https://github.com/dotnet/fsharp/pull/18451))
### Changed
diff --git a/eng/Publishing.props b/eng/Publishing.props
new file mode 100644
index 00000000000..5f9650d32dc
--- /dev/null
+++ b/eng/Publishing.props
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 32ba644ba75..0f64f53dbf3 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -2,9 +2,9 @@
-
+
https://github.com/dotnet/source-build-reference-packages
- 7dbf5deea5bdccf513df73cba179c4c0ad106010
+ 19eb5ea4e5f9c4e5256843a92805c8c9e942207d
diff --git a/src/Compiler/Checking/Expressions/CheckComputationExpressions.fs b/src/Compiler/Checking/Expressions/CheckComputationExpressions.fs
index 45a35970af7..a7bcc1f9f87 100644
--- a/src/Compiler/Checking/Expressions/CheckComputationExpressions.fs
+++ b/src/Compiler/Checking/Expressions/CheckComputationExpressions.fs
@@ -849,6 +849,20 @@ let (|OptionalSequential|) e =
| SynExpr.Sequential(debugPoint = _sp; isTrueSeq = true; expr1 = dataComp1; expr2 = dataComp2) -> (dataComp1, Some dataComp2)
| _ -> (e, None)
+[]
+let (|ExprAsUseBang|_|) expr =
+ match expr with
+ | SynExpr.LetOrUseBang(
+ bindDebugPoint = spBind
+ isUse = true
+ isFromSource = isFromSource
+ pat = pat
+ rhs = rhsExpr
+ andBangs = andBangs
+ body = innerComp
+ trivia = { LetOrUseBangKeyword = mBind }) -> ValueSome(spBind, isFromSource, pat, rhsExpr, andBangs, innerComp, mBind)
+ | _ -> ValueNone
+
// "cexpr; cexpr" is treated as builder.Combine(cexpr1, cexpr1)
// This is not pretty - we have to decide which range markers we use for the calls to Combine and Delay
// NOTE: we should probably suppress these sequence points altogether
@@ -910,6 +924,11 @@ let inline addVarsToVarSpace (varSpace: LazyWithContext
id
)
+/// Checks if a builder method exists and reports an error if it doesn't
+let requireBuilderMethod methodName m1 cenv env ad builderTy m2 =
+ if isNil (TryFindIntrinsicOrExtensionMethInfo ResultCollectionSettings.AtMostOneResult cenv env m1 ad methodName builderTy) then
+ error (Error(FSComp.SR.tcRequireBuilderMethod methodName, m2))
+
///
/// Try translate the syntax sugar
///
@@ -1211,19 +1230,7 @@ let rec TryTranslateComputationExpression
let mPat = pat.Range
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- mFor
- ceenv.ad
- "For"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod ("For"), mFor))
+ requireBuilderMethod "For" mFor cenv ceenv.env ceenv.ad ceenv.builderTy mFor
// Add the variables to the query variable space, on demand
let varSpace =
@@ -1296,33 +1303,8 @@ let rec TryTranslateComputationExpression
if ceenv.isQuery then
error (Error(FSComp.SR.tcNoWhileInQuery (), mWhile))
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- mWhile
- ceenv.ad
- "While"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod ("While"), mWhile))
-
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- mWhile
- ceenv.ad
- "Delay"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod ("Delay"), mWhile))
+ requireBuilderMethod "While" mWhile cenv ceenv.env ceenv.ad ceenv.builderTy mWhile
+ requireBuilderMethod "Delay" mWhile cenv ceenv.env ceenv.ad ceenv.builderTy mWhile
// 'while' is hit just before each time the guard is called
let guardExpr =
@@ -1451,33 +1433,8 @@ let rec TryTranslateComputationExpression
if ceenv.isQuery then
error (Error(FSComp.SR.tcNoTryFinallyInQuery (), mTry))
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- mTry
- ceenv.ad
- "TryFinally"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod ("TryFinally"), mTry))
-
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- mTry
- ceenv.ad
- "Delay"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod ("Delay"), mTry))
+ requireBuilderMethod "TryFinally" mTry cenv ceenv.env ceenv.ad ceenv.builderTy mTry
+ requireBuilderMethod "Delay" mTry cenv ceenv.env ceenv.ad ceenv.builderTy mTry
let innerExpr = TranslateComputationExpressionNoQueryOps ceenv innerComp
@@ -1618,34 +1575,8 @@ let rec TryTranslateComputationExpression
| SynExpr.YieldOrReturnFrom(trivia = yieldOrReturnFrom) -> yieldOrReturnFrom.YieldOrReturnFromKeyword
| expr -> expr.Range
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- m
- ceenv.ad
- "Combine"
- ceenv.builderTy
- )
- then
-
- error (Error(FSComp.SR.tcRequireBuilderMethod "Combine", combineDelayRange))
-
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- m
- ceenv.ad
- "Delay"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod "Delay", combineDelayRange))
+ requireBuilderMethod "Combine" m cenv ceenv.env ceenv.ad ceenv.builderTy combineDelayRange
+ requireBuilderMethod "Delay" m cenv ceenv.env ceenv.ad ceenv.builderTy combineDelayRange
let combineCall =
mkSynCall
@@ -1748,19 +1679,7 @@ let rec TryTranslateComputationExpression
)
| None ->
let elseComp =
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- trivia.IfToThenRange
- ceenv.ad
- "Zero"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod ("Zero"), trivia.IfToThenRange))
+ requireBuilderMethod "Zero" trivia.IfToThenRange cenv ceenv.env ceenv.ad ceenv.builderTy trivia.IfToThenRange
mkSynCall "Zero" trivia.IfToThenRange [] ceenv.builderValName
@@ -1838,19 +1757,7 @@ let rec TryTranslateComputationExpression
innerCompRange
)
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- mBind
- ceenv.ad
- "Using"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod ("Using"), mBind))
+ requireBuilderMethod "Using" mBind cenv ceenv.env ceenv.ad ceenv.builderTy mBind
Some(
translatedCtxt (mkSynCall "Using" mBind [ rhsExpr; consumeExpr ] ceenv.builderValName)
@@ -1903,102 +1810,59 @@ let rec TryTranslateComputationExpression
)
// 'use! pat = e1 in e2' --> build.Bind(e1, (function _argN -> match _argN with pat -> build.Using(x, (fun _argN -> match _argN with pat -> e2))))
- | SynExpr.LetOrUseBang(
- bindDebugPoint = spBind
- isUse = true
- isFromSource = isFromSource
- pat = SynPat.Named(ident = SynIdent(id, _); isThisVal = false) as pat
- rhs = rhsExpr
- andBangs = []
- body = innerComp
- trivia = { LetOrUseBangKeyword = mBind })
- | SynExpr.LetOrUseBang(
- bindDebugPoint = spBind
- isUse = true
- isFromSource = isFromSource
- pat = SynPat.LongIdent(longDotId = SynLongIdent(id = [ id ])) as pat
- rhs = rhsExpr
- andBangs = []
- body = innerComp
- trivia = { LetOrUseBangKeyword = mBind }) ->
-
+ | ExprAsUseBang(spBind, isFromSource, pat, rhsExpr, andBangs, innerComp, mBind) ->
if ceenv.isQuery then
error (Error(FSComp.SR.tcBindMayNotBeUsedInQueries (), mBind))
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- mBind
- ceenv.ad
- "Using"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod ("Using"), mBind))
-
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- mBind
- ceenv.ad
- "Bind"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod ("Bind"), mBind))
+ match pat, andBangs with
+ | (SynPat.Named(ident = SynIdent(id, _); isThisVal = false) | SynPat.LongIdent(longDotId = SynLongIdent(id = [ id ]))), [] ->
+ // Valid pattern case - handle with Using + Bind
+ requireBuilderMethod "Using" mBind cenv ceenv.env ceenv.ad ceenv.builderTy mBind
+ requireBuilderMethod "Bind" mBind cenv ceenv.env ceenv.ad ceenv.builderTy mBind
- let bindExpr =
- let consumeExpr =
- SynExpr.MatchLambda(
- false,
- mBind,
- [
- SynMatchClause(
- pat,
- None,
- TranslateComputationExpressionNoQueryOps ceenv innerComp,
- innerComp.Range,
- DebugPointAtTarget.Yes,
- SynMatchClauseTrivia.Zero
- )
- ],
- DebugPointAtBinding.NoneAtInvisible,
- mBind
- )
-
- let consumeExpr =
- mkSynCall "Using" mBind [ SynExpr.Ident id; consumeExpr ] ceenv.builderValName
+ let bindExpr =
+ let consumeExpr =
+ SynExpr.MatchLambda(
+ false,
+ mBind,
+ [
+ SynMatchClause(
+ pat,
+ None,
+ TranslateComputationExpressionNoQueryOps ceenv innerComp,
+ innerComp.Range,
+ DebugPointAtTarget.Yes,
+ SynMatchClauseTrivia.Zero
+ )
+ ],
+ DebugPointAtBinding.NoneAtInvisible,
+ mBind
+ )
- let consumeExpr =
- SynExpr.MatchLambda(
- false,
- mBind,
- [
- SynMatchClause(pat, None, consumeExpr, id.idRange, DebugPointAtTarget.No, SynMatchClauseTrivia.Zero)
- ],
- DebugPointAtBinding.NoneAtInvisible,
- mBind
- )
+ let consumeExpr =
+ mkSynCall "Using" mBind [ SynExpr.Ident id; consumeExpr ] ceenv.builderValName
- let rhsExpr =
- mkSourceExprConditional isFromSource rhsExpr ceenv.sourceMethInfo ceenv.builderValName
+ let consumeExpr =
+ SynExpr.MatchLambda(
+ false,
+ mBind,
+ [
+ SynMatchClause(pat, None, consumeExpr, id.idRange, DebugPointAtTarget.No, SynMatchClauseTrivia.Zero)
+ ],
+ DebugPointAtBinding.NoneAtInvisible,
+ mBind
+ )
- mkSynCall "Bind" mBind [ rhsExpr; consumeExpr ] ceenv.builderValName
- |> addBindDebugPoint spBind
+ let rhsExpr =
+ mkSourceExprConditional isFromSource rhsExpr ceenv.sourceMethInfo ceenv.builderValName
- Some(translatedCtxt bindExpr)
+ mkSynCall "Bind" mBind [ rhsExpr; consumeExpr ] ceenv.builderValName
+ |> addBindDebugPoint spBind
- // 'use! pat = e1 ... in e2' where 'pat' is not a simple name -> error
- | SynExpr.LetOrUseBang(isUse = true; andBangs = andBangs; trivia = { LetOrUseBangKeyword = mBind }) ->
- if isNil andBangs then
- error (Error(FSComp.SR.tcInvalidUseBangBinding (), mBind))
- else
+ Some(translatedCtxt bindExpr)
+ | _pat, [] -> error (Error(FSComp.SR.tcInvalidUseBangBinding (), mBind))
+ | _pat, _ands ->
+ // Has andBangs
let m =
match andBangs with
| [] -> comp.Range
@@ -2182,19 +2046,7 @@ let rec TryTranslateComputationExpression
// Call MergeSources2(e1, e2), MergeSources3(e1, e2, e3) etc
let mergeSourcesName = mkMergeSourcesName numSourcesAndPats
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- mBind
- ceenv.ad
- mergeSourcesName
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireMergeSourcesOrBindN (bindNName), mBind))
+ requireBuilderMethod mergeSourcesName mBind cenv ceenv.env ceenv.ad ceenv.builderTy mBind
let source =
mkSynCall mergeSourcesName sourcesRange (List.map fst sourcesAndPats) ceenv.builderValName
@@ -2210,19 +2062,7 @@ let rec TryTranslateComputationExpression
let mergeSourcesName = mkMergeSourcesName maxMergeSources
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- mBind
- ceenv.ad
- mergeSourcesName
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireMergeSourcesOrBindN (bindNName), mBind))
+ requireBuilderMethod mergeSourcesName mBind cenv ceenv.env ceenv.ad ceenv.builderTy mBind
let laterSource, laterPat = mergeSources laterSourcesAndPats
@@ -2285,19 +2125,7 @@ let rec TryTranslateComputationExpression
if ceenv.isQuery then
error (Error(FSComp.SR.tcMatchMayNotBeUsedWithQuery (), trivia.MatchBangKeyword))
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- trivia.MatchBangKeyword
- ceenv.ad
- "Bind"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod ("Bind"), trivia.MatchBangKeyword))
+ requireBuilderMethod "Bind" trivia.MatchBangKeyword cenv ceenv.env ceenv.ad ceenv.builderTy trivia.MatchBangKeyword
let clauses =
clauses
@@ -2335,33 +2163,8 @@ let rec TryTranslateComputationExpression
let consumeExpr =
SynExpr.MatchLambda(true, mTryToLast, clauses, spWith2, mTryToLast)
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- mTry
- ceenv.ad
- "TryWith"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod ("TryWith"), mTry))
-
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- mTry
- ceenv.ad
- "Delay"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod ("Delay"), mTry))
+ requireBuilderMethod "TryWith" mTry cenv ceenv.env ceenv.ad ceenv.builderTy mTry
+ requireBuilderMethod "Delay" mTry cenv ceenv.env ceenv.ad ceenv.builderTy mTry
let innerExpr = TranslateComputationExpressionNoQueryOps ceenv innerComp
@@ -2386,19 +2189,7 @@ let rec TryTranslateComputationExpression
let yieldFromExpr =
mkSourceExpr synYieldExpr ceenv.sourceMethInfo ceenv.builderValName
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- m
- ceenv.ad
- "YieldFrom"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod ("YieldFrom"), m))
+ requireBuilderMethod "YieldFrom" m cenv ceenv.env ceenv.ad ceenv.builderTy m
let yieldFromCall =
mkSynCall "YieldFrom" synYieldExpr.Range [ yieldFromExpr ] ceenv.builderValName
@@ -2418,19 +2209,7 @@ let rec TryTranslateComputationExpression
if ceenv.isQuery then
error (Error(FSComp.SR.tcReturnMayNotBeUsedInQueries (), m))
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- m
- ceenv.ad
- "ReturnFrom"
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod ("ReturnFrom"), m))
+ requireBuilderMethod "ReturnFrom" m cenv ceenv.env ceenv.ad ceenv.builderTy m
let returnFromCall =
mkSynCall "ReturnFrom" synReturnExpr.Range [ returnFromExpr ] ceenv.builderValName
@@ -2449,19 +2228,7 @@ let rec TryTranslateComputationExpression
if ceenv.isQuery && not isYield then
error (Error(FSComp.SR.tcReturnMayNotBeUsedInQueries (), m))
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- cenv
- ceenv.env
- m
- ceenv.ad
- methName
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod methName, m))
+ requireBuilderMethod methName m cenv ceenv.env ceenv.ad ceenv.builderTy m
let yieldOrReturnCall =
mkSynCall methName synYieldOrReturnExpr.Range [ synYieldOrReturnExpr ] ceenv.builderValName
@@ -2731,19 +2498,7 @@ and TranslateComputationExpressionBind
| _ ->
- if
- isNil (
- TryFindIntrinsicOrExtensionMethInfo
- ResultCollectionSettings.AtMostOneResult
- ceenv.cenv
- ceenv.env
- bindRange
- ceenv.ad
- bindName
- ceenv.builderTy
- )
- then
- error (Error(FSComp.SR.tcRequireBuilderMethod (bindName), bindRange))
+ requireBuilderMethod bindName bindRange ceenv.cenv ceenv.env ceenv.ad ceenv.builderTy bindRange
// Build the `Bind` call
TranslateComputationExpression ceenv CompExprTranslationPass.Initial q varSpace innerComp (fun holeFill ->
diff --git a/src/FSharp.Core/fslib-extra-pervasives.fs b/src/FSharp.Core/fslib-extra-pervasives.fs
index 07a03675937..08d4ee2308b 100644
--- a/src/FSharp.Core/fslib-extra-pervasives.fs
+++ b/src/FSharp.Core/fslib-extra-pervasives.fs
@@ -325,6 +325,7 @@ module ExtraTopLevelOperators =
[]
[]
[]
+ []
[]
[]
[]
diff --git a/src/FSharp.Core/tasks.fs b/src/FSharp.Core/tasks.fs
index 687bae5af85..a4ba6b2dbd7 100644
--- a/src/FSharp.Core/tasks.fs
+++ b/src/FSharp.Core/tasks.fs
@@ -370,7 +370,48 @@ module LowPriority =
=
ResumableCode.Using(resource, body)
+ type TaskBuilder with
+ member inline this.MergeSources< ^TaskLike1, ^TaskLike2, ^TResult1, ^TResult2, ^Awaiter1, ^Awaiter2
+ when ^TaskLike1: (member GetAwaiter: unit -> ^Awaiter1)
+ and ^TaskLike2: (member GetAwaiter: unit -> ^Awaiter2)
+ and ^Awaiter1 :> ICriticalNotifyCompletion
+ and ^Awaiter2 :> ICriticalNotifyCompletion
+ and ^Awaiter1: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter1: (member GetResult: unit -> ^TResult1)
+ and ^Awaiter2: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter2: (member GetResult: unit -> ^TResult2)>
+ (task1: ^TaskLike1, task2: ^TaskLike2)
+ : Task =
+ this.Run(
+ this.Bind(
+ task1,
+ fun (result1: ^TResult1) ->
+ this.Bind(task2, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+ type BackgroundTaskBuilder with
+ member inline this.MergeSources< ^TaskLike1, ^TaskLike2, ^TResult1, ^TResult2, ^Awaiter1, ^Awaiter2
+ when ^TaskLike1: (member GetAwaiter: unit -> ^Awaiter1)
+ and ^TaskLike2: (member GetAwaiter: unit -> ^Awaiter2)
+ and ^Awaiter1 :> ICriticalNotifyCompletion
+ and ^Awaiter2 :> ICriticalNotifyCompletion
+ and ^Awaiter1: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter1: (member GetResult: unit -> ^TResult1)
+ and ^Awaiter2: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter2: (member GetResult: unit -> ^TResult2)>
+ (task1: ^TaskLike1, task2: ^TaskLike2)
+ : Task =
+ this.Run(
+ this.Bind(
+ task1,
+ fun (result1: ^TResult1) ->
+ this.Bind(task2, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
module HighPriority =
+
// High priority extensions
type TaskBuilderBase with
@@ -424,7 +465,36 @@ module HighPriority =
member inline this.ReturnFrom(task: Task<'T>) : TaskCode<'T, 'T> =
this.Bind(task, this.Return)
+ type TaskBuilder with
+
+ // This overload is required for type inference in tasks cases
+ member inline this.MergeSources
+ (task1: Task< ^TResult1 >, task2: Task< ^TResult2 >)
+ : Task =
+ this.Run(
+ this.Bind(
+ task1,
+ fun (result1: ^TResult1) ->
+ this.Bind(task2, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+ type BackgroundTaskBuilder with
+
+ // This overload is required for type inference in tasks cases
+ member inline this.MergeSources
+ (task1: Task< ^TResult1 >, task2: Task< ^TResult2 >)
+ : Task =
+ this.Run(
+ this.Bind(
+ task1,
+ fun (result1: ^TResult1) ->
+ this.Bind(task2, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
module MediumPriority =
+ open LowPriority
open HighPriority
// Medium priority extensions
@@ -437,3 +507,213 @@ module MediumPriority =
member inline this.ReturnFrom(computation: Async<'T>) : TaskCode<'T, 'T> =
this.ReturnFrom(Async.StartImmediateAsTask computation)
+
+ type TaskBuilder with
+
+ // This overload is required for type inference in tasks cases
+ member inline this.MergeSources< ^TaskLike2, ^TResult1, ^TResult2, ^Awaiter2
+ when ^TaskLike2: (member GetAwaiter: unit -> ^Awaiter2)
+ and ^Awaiter2 :> ICriticalNotifyCompletion
+ and ^Awaiter2: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter2: (member GetResult: unit -> 'TResult2)>
+ (task1: Task< ^TResult1 >, task2: ^TaskLike2)
+ : Task =
+ this.Run(
+ this.Bind(
+ task1,
+ fun (result1: ^TResult1) ->
+ this.Bind(task2, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+ // This overload is required for type inference in tasks cases
+ member inline this.MergeSources< ^TaskLike1, ^TResult1, ^TResult2, ^Awaiter1
+ when ^TaskLike1: (member GetAwaiter: unit -> ^Awaiter1)
+ and ^Awaiter1 :> ICriticalNotifyCompletion
+ and ^Awaiter1: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter1: (member GetResult: unit -> 'TResult1)>
+ (task1: ^TaskLike1, task2: Task< ^TResult2 >)
+ : Task =
+ this.Run(
+ this.Bind(
+ task1,
+ fun (result1: ^TResult1) ->
+ this.Bind(task2, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+ // This overload is required for type inference in async cases
+ member inline this.MergeSources
+ (computation1: Async< ^TResult1 >, computation2: Async< ^TResult2 >)
+ : Task =
+ this.Run(
+ this.Bind(
+ computation1,
+ fun (result1: ^TResult1) ->
+ this.Bind(computation2, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+ // This overload is required for type inference in task + async cases
+ member inline this.MergeSources
+ (task: Task< ^TResult1 >, computation: Async< ^TResult2 >)
+ : Task =
+ this.Run(
+ this.Bind(
+ task,
+ fun (result1: ^TResult1) ->
+ this.Bind(computation, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+ // This overload is required for type inference in async + task case
+ member inline this.MergeSources
+ (computation: Async< ^TResult1 >, task: Task< ^TResult2 >)
+ : Task =
+ this.Run(
+ this.Bind(
+ computation,
+ fun (result1: ^TResult1) ->
+ this.Bind(task, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+ type BackgroundTaskBuilder with
+
+ // This overload is required for type inference in tasks cases
+ member inline this.MergeSources< ^TaskLike2, ^TResult1, ^TResult2, ^Awaiter2
+ when ^TaskLike2: (member GetAwaiter: unit -> ^Awaiter2)
+ and ^Awaiter2 :> ICriticalNotifyCompletion
+ and ^Awaiter2: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter2: (member GetResult: unit -> 'TResult2)>
+ (task1: Task< ^TResult1 >, task2: ^TaskLike2)
+ : Task =
+ this.Run(
+ this.Bind(
+ task1,
+ fun (result1: ^TResult1) ->
+ this.Bind(task2, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+ // This overload is required for type inference in tasks cases
+ member inline this.MergeSources< ^TaskLike1, ^TResult1, ^TResult2, ^Awaiter1
+ when ^TaskLike1: (member GetAwaiter: unit -> ^Awaiter1)
+ and ^Awaiter1 :> ICriticalNotifyCompletion
+ and ^Awaiter1: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter1: (member GetResult: unit -> 'TResult1)>
+ (task1: ^TaskLike1, task2: Task< ^TResult2 >)
+ : Task =
+ this.Run(
+ this.Bind(
+ task1,
+ fun (result1: ^TResult1) ->
+ this.Bind(task2, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+ // This overload is required for type inference in async cases
+ member inline this.MergeSources
+ (computation1: Async< ^TResult1 >, computation2: Async< ^TResult2 >)
+ : Task =
+ this.Run(
+ this.Bind(
+ computation1,
+ fun (result1: ^TResult1) ->
+ this.Bind(computation2, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+ // This overload is required for type inference in task + async cases
+ member inline this.MergeSources
+ (task: Task< ^TResult1 >, computation: Async< ^TResult2 >)
+ : Task =
+ this.Run(
+ this.Bind(
+ task,
+ fun (result1: ^TResult1) ->
+ this.Bind(computation, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+ // This overload is required for type inference in async + task case
+ member inline this.MergeSources
+ (computation: Async< ^TResult1 >, task: Task< ^TResult2 >)
+ : Task =
+ this.Run(
+ this.Bind(
+ computation,
+ fun (result1: ^TResult1) ->
+ this.Bind(task, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+module LowPlusPriority =
+ open LowPriority
+ open MediumPriority
+
+ type TaskBuilder with
+ // This overload is required for type inference in async cases
+ member inline this.MergeSources< ^TaskLike2, ^TResult1, ^TResult2, ^Awaiter2
+ when ^TaskLike2: (member GetAwaiter: unit -> ^Awaiter2)
+ and ^Awaiter2 :> ICriticalNotifyCompletion
+ and ^Awaiter2: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter2: (member GetResult: unit -> 'TResult2)>
+ (computation: Async< ^TResult1 >, task: ^TaskLike2)
+ : Task =
+ this.Run(
+ this.Bind(
+ computation,
+ fun (result1: ^TResult1) ->
+ this.Bind(task, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+ // This overload is required for type inference in async cases
+ member inline this.MergeSources< ^TaskLike1, ^TResult1, ^TResult2, ^Awaiter1
+ when ^TaskLike1: (member GetAwaiter: unit -> ^Awaiter1)
+ and ^Awaiter1 :> ICriticalNotifyCompletion
+ and ^Awaiter1: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter1: (member GetResult: unit -> 'TResult1)>
+ (task: ^TaskLike1, computation: Async< ^TResult2 >)
+ : Task =
+ this.Run(
+ this.Bind(
+ task,
+ fun (result1: ^TResult1) ->
+ this.Bind(computation, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+ type BackgroundTaskBuilder with
+ // This overload is required for type inference in async cases
+ member inline this.MergeSources< ^TaskLike2, ^TResult1, ^TResult2, ^Awaiter2
+ when ^TaskLike2: (member GetAwaiter: unit -> ^Awaiter2)
+ and ^Awaiter2 :> ICriticalNotifyCompletion
+ and ^Awaiter2: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter2: (member GetResult: unit -> 'TResult2)>
+ (computation: Async< ^TResult1 >, task: ^TaskLike2)
+ : Task =
+ this.Run(
+ this.Bind(
+ computation,
+ fun (result1: ^TResult1) ->
+ this.Bind(task, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
+
+ // This overload is required for type inference in async cases
+ member inline this.MergeSources< ^TaskLike1, ^TResult1, ^TResult2, ^Awaiter1
+ when ^TaskLike1: (member GetAwaiter: unit -> ^Awaiter1)
+ and ^Awaiter1 :> ICriticalNotifyCompletion
+ and ^Awaiter1: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter1: (member GetResult: unit -> 'TResult1)>
+ (task: ^TaskLike1, computation: Async< ^TResult2 >)
+ : Task =
+ this.Run(
+ this.Bind(
+ task,
+ fun (result1: ^TResult1) ->
+ this.Bind(computation, fun (result2: ^TResult2) -> this.Return struct (result1, result2))
+ )
+ )
diff --git a/src/FSharp.Core/tasks.fsi b/src/FSharp.Core/tasks.fsi
index e6c801351a1..2db377cb2a1 100644
--- a/src/FSharp.Core/tasks.fsi
+++ b/src/FSharp.Core/tasks.fsi
@@ -239,6 +239,84 @@ module LowPriority =
resource: 'Resource * body: ('Resource -> TaskCode<'TOverall, 'T>) -> TaskCode<'TOverall, 'T>
when 'Resource :> IDisposable | null
+ type TaskBuilder with
+
+ ///
+ /// Implementation of the `and!` operation for two task-like values.
+ ///
+ member inline MergeSources< ^TaskLike1, ^TaskLike2, ^TResult1, ^TResult2, ^Awaiter1, ^Awaiter2> :
+ task1: ^TaskLike1 * task2: ^TaskLike2 -> Task
+ when ^TaskLike1: (member GetAwaiter: unit -> ^Awaiter1)
+ and ^TaskLike2: (member GetAwaiter: unit -> ^Awaiter2)
+ and ^Awaiter1 :> ICriticalNotifyCompletion
+ and ^Awaiter2 :> ICriticalNotifyCompletion
+ and ^Awaiter1: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter1: (member GetResult: unit -> ^TResult1)
+ and ^Awaiter2: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter2: (member GetResult: unit -> ^TResult2)
+
+ type BackgroundTaskBuilder with
+
+ ///
+ /// Implementation of the `and!` operation for two task-like values.
+ ///
+ member inline MergeSources< ^TaskLike1, ^TaskLike2, ^TResult1, ^TResult2, ^Awaiter1, ^Awaiter2> :
+ task1: ^TaskLike1 * task2: ^TaskLike2 -> Task
+ when ^TaskLike1: (member GetAwaiter: unit -> ^Awaiter1)
+ and ^TaskLike2: (member GetAwaiter: unit -> ^Awaiter2)
+ and ^Awaiter1 :> ICriticalNotifyCompletion
+ and ^Awaiter2 :> ICriticalNotifyCompletion
+ and ^Awaiter1: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter1: (member GetResult: unit -> ^TResult1)
+ and ^Awaiter2: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter2: (member GetResult: unit -> ^TResult2)
+
+module LowPlusPriority =
+
+ type TaskBuilder with
+
+ ///
+ /// Implementation of the `and!` operation for an async and a task-like value.
+ ///
+ member inline MergeSources< ^TaskLike2, ^TResult1, ^TResult2, ^Awaiter2> :
+ computation: Async< ^TResult1 > * task: ^TaskLike2 -> Task
+ when ^TaskLike2: (member GetAwaiter: unit -> ^Awaiter2)
+ and ^Awaiter2 :> ICriticalNotifyCompletion
+ and ^Awaiter2: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter2: (member GetResult: unit -> ^TResult2)
+
+ ///
+ /// Implementation of the `and!` operation for a task-like value and an async.
+ ///
+ member inline MergeSources< ^TaskLike1, ^TResult1, ^TResult2, ^Awaiter1> :
+ task: ^TaskLike1 * computation: Async< ^TResult2 > -> Task
+ when ^TaskLike1: (member GetAwaiter: unit -> ^Awaiter1)
+ and ^Awaiter1 :> ICriticalNotifyCompletion
+ and ^Awaiter1: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter1: (member GetResult: unit -> ^TResult1)
+
+ type BackgroundTaskBuilder with
+
+ ///
+ /// Implementation of the `and!` operation for an async and a task-like value.
+ ///
+ member inline MergeSources< ^TaskLike2, ^TResult1, ^TResult2, ^Awaiter2> :
+ computation: Async< ^TResult1 > * task: ^TaskLike2 -> Task
+ when ^TaskLike2: (member GetAwaiter: unit -> ^Awaiter2)
+ and ^Awaiter2 :> ICriticalNotifyCompletion
+ and ^Awaiter2: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter2: (member GetResult: unit -> ^TResult2)
+
+ ///
+ /// Implementation of the `and!` operation for a task-like value and an async.
+ ///
+ member inline MergeSources< ^TaskLike1, ^TResult1, ^TResult2, ^Awaiter1> :
+ task: ^TaskLike1 * computation: Async< ^TResult2 > -> Task
+ when ^TaskLike1: (member GetAwaiter: unit -> ^Awaiter1)
+ and ^Awaiter1 :> ICriticalNotifyCompletion
+ and ^Awaiter1: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter1: (member GetResult: unit -> ^TResult1)
+
///
/// Contains medium-priority overloads for the `task` computation expression builder.
///
@@ -258,6 +336,86 @@ module MediumPriority =
///
member inline ReturnFrom: computation: Async<'T> -> TaskCode<'T, 'T>
+ type TaskBuilder with
+
+ ///
+ /// Implementation of the `and!` operation for a a task and a task-like value.
+ ///
+ member inline MergeSources< ^TaskLike2, ^TResult1, ^TResult2, ^Awaiter2> :
+ task1: Task< ^TResult1 > * task2: ^TaskLike2 -> Task
+ when ^TaskLike2: (member GetAwaiter: unit -> ^Awaiter2)
+ and ^Awaiter2 :> ICriticalNotifyCompletion
+ and ^Awaiter2: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter2: (member GetResult: unit -> ^TResult2)
+
+ ///
+ /// Implementation of the `and!` operation for a task-like value and a task.
+ ///
+ member inline MergeSources< ^TaskLike1, ^TResult1, ^TResult2, ^Awaiter1> :
+ task1: ^TaskLike1 * task2: Task< ^TResult2 > -> Task
+ when ^TaskLike1: (member GetAwaiter: unit -> ^Awaiter1)
+ and ^Awaiter1 :> ICriticalNotifyCompletion
+ and ^Awaiter1: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter1: (member GetResult: unit -> ^TResult1)
+
+ ///
+ /// Implementation of the `and!` operation for two asyncs.
+ ///
+ member inline MergeSources< ^TResult1, ^TResult2> :
+ computation1: Async< ^TResult1 > * computation2: Async< ^TResult2 > -> Task
+
+ ///
+ /// Implementation of the `and!` operation for a task and an async.
+ ///
+ member inline MergeSources< ^TResult1, ^TResult2> :
+ task: Task< ^TResult1 > * computation: Async< ^TResult2 > -> Task
+
+ ///
+ /// Implementation of the `and!` operation for an async and a task.
+ ///
+ member inline MergeSources< ^TResult1, ^TResult2> :
+ computation: Async< ^TResult1 > * task: Task< ^TResult2 > -> Task
+
+ type BackgroundTaskBuilder with
+
+ ///
+ /// Implementation of the `and!` operation for a a task and a task-like value.
+ ///
+ member inline MergeSources< ^TaskLike2, ^TResult1, ^TResult2, ^Awaiter2> :
+ task1: Task< ^TResult1 > * task2: ^TaskLike2 -> Task
+ when ^TaskLike2: (member GetAwaiter: unit -> ^Awaiter2)
+ and ^Awaiter2 :> ICriticalNotifyCompletion
+ and ^Awaiter2: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter2: (member GetResult: unit -> ^TResult2)
+
+ ///
+ /// Implementation of the `and!` operation for a task-like value and a task.
+ ///
+ member inline MergeSources< ^TaskLike1, ^TResult1, ^TResult2, ^Awaiter1> :
+ task1: ^TaskLike1 * task2: Task< ^TResult2 > -> Task
+ when ^TaskLike1: (member GetAwaiter: unit -> ^Awaiter1)
+ and ^Awaiter1 :> ICriticalNotifyCompletion
+ and ^Awaiter1: (member get_IsCompleted: unit -> bool)
+ and ^Awaiter1: (member GetResult: unit -> ^TResult1)
+
+ ///
+ /// Implementation of the `and!` operation for two asyncs.
+ ///
+ member inline MergeSources< ^TResult1, ^TResult2> :
+ computation1: Async< ^TResult1 > * computation2: Async< ^TResult2 > -> Task
+
+ ///
+ /// Implementation of the `and!` operation for a task and an async.
+ ///
+ member inline MergeSources< ^TResult1, ^TResult2> :
+ task: Task< ^TResult1 > * computation: Async< ^TResult2 > -> Task
+
+ ///
+ /// Implementation of the `and!` operation for an async and a task.
+ ///
+ member inline MergeSources< ^TResult1, ^TResult2> :
+ computation: Async< ^TResult1 > * task: Task< ^TResult2 > -> Task
+
///
/// Contains high-priority overloads for the `task` computation expression builder.
///
@@ -285,3 +443,17 @@ module HighPriority =
task: Task<'TResult1> *
continuation: ('TResult1 -> TaskCode<'TOverall, 'TResult2>) ->
bool
+
+ type TaskBuilder with
+ ///
+ /// Implementation of the `and!` operation for two tasks.
+ ///
+ member inline MergeSources< ^TResult1, ^TResult2> :
+ task1: Task< ^TResult1 > * task2: Task< ^TResult2 > -> Task
+
+ type BackgroundTaskBuilder with
+ ///
+ /// Implementation of the `and!` operation for two tasks.
+ ///
+ member inline MergeSources< ^TResult1, ^TResult2> :
+ task1: Task< ^TResult1 > * task2: Task< ^TResult2 > -> Task
diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.debug.bsl b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.debug.bsl
index 8b927e77440..5bd39b09a39 100644
--- a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.debug.bsl
+++ b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.debug.bsl
@@ -754,6 +754,16 @@ Microsoft.FSharp.Control.TaskBuilderBase: Microsoft.FSharp.Core.CompilerServices
Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: Boolean TaskBuilderBase.BindDynamic.Static[TOverall,TResult1,TResult2](Microsoft.FSharp.Core.CompilerServices.ResumableStateMachine`1[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall]] ByRef, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2] TaskBuilderBase.Bind[TResult1,TOverall,TResult2](Microsoft.FSharp.Control.TaskBuilderBase, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom[T](Microsoft.FSharp.Control.TaskBuilderBase, System.Threading.Tasks.Task`1[T])
+Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Boolean TaskBuilderBase.BindDynamic.Static$W[TTaskLike,TResult1,TResult2,TAwaiter,TOverall](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike,TAwaiter], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,System.Boolean], Microsoft.FSharp.Core.CompilerServices.ResumableStateMachine`1[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall]] ByRef, TTaskLike, Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Boolean TaskBuilderBase.BindDynamic.Static[TTaskLike,TResult1,TResult2,TAwaiter,TOverall](Microsoft.FSharp.Core.CompilerServices.ResumableStateMachine`1[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall]] ByRef, TTaskLike, Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2] TaskBuilderBase.Bind$W[TTaskLike,TResult1,TResult2,TAwaiter,TOverall](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike,TAwaiter], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,System.Boolean], Microsoft.FSharp.Control.TaskBuilderBase, TTaskLike, Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
@@ -761,8 +771,26 @@ Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Cor
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],T] TaskBuilderBase.Using[TResource,TOverall,T](Microsoft.FSharp.Control.TaskBuilderBase, TResource, Microsoft.FSharp.Core.FSharpFunc`2[TResource,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],T]])
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom$W[TTaskLike,TAwaiter,T](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike,TAwaiter], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,T], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,System.Boolean], Microsoft.FSharp.Control.TaskBuilderBase, TTaskLike)
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom[TTaskLike,TAwaiter,T](Microsoft.FSharp.Control.TaskBuilderBase, TTaskLike)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, TTaskLike2)
Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2] TaskBuilderBase.Bind[TResult1,TOverall,TResult2](Microsoft.FSharp.Control.TaskBuilderBase, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom[T](Microsoft.FSharp.Control.TaskBuilderBase, Microsoft.FSharp.Control.FSharpAsync`1[T])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
Microsoft.FSharp.Control.TaskBuilderModule: Microsoft.FSharp.Control.BackgroundTaskBuilder backgroundTask
Microsoft.FSharp.Control.TaskBuilderModule: Microsoft.FSharp.Control.BackgroundTaskBuilder get_backgroundTask()
Microsoft.FSharp.Control.TaskBuilderModule: Microsoft.FSharp.Control.TaskBuilder get_task()
diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.release.bsl b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.release.bsl
index cac2ceae8ed..8096acb15a1 100644
--- a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.release.bsl
+++ b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.release.bsl
@@ -754,6 +754,16 @@ Microsoft.FSharp.Control.TaskBuilderBase: Microsoft.FSharp.Core.CompilerServices
Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: Boolean TaskBuilderBase.BindDynamic.Static[TOverall,TResult1,TResult2](Microsoft.FSharp.Core.CompilerServices.ResumableStateMachine`1[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall]] ByRef, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2] TaskBuilderBase.Bind[TResult1,TOverall,TResult2](Microsoft.FSharp.Control.TaskBuilderBase, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom[T](Microsoft.FSharp.Control.TaskBuilderBase, System.Threading.Tasks.Task`1[T])
+Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Boolean TaskBuilderBase.BindDynamic.Static$W[TTaskLike,TResult1,TResult2,TAwaiter,TOverall](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike,TAwaiter], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,System.Boolean], Microsoft.FSharp.Core.CompilerServices.ResumableStateMachine`1[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall]] ByRef, TTaskLike, Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Boolean TaskBuilderBase.BindDynamic.Static[TTaskLike,TResult1,TResult2,TAwaiter,TOverall](Microsoft.FSharp.Core.CompilerServices.ResumableStateMachine`1[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall]] ByRef, TTaskLike, Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2] TaskBuilderBase.Bind$W[TTaskLike,TResult1,TResult2,TAwaiter,TOverall](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike,TAwaiter], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,System.Boolean], Microsoft.FSharp.Control.TaskBuilderBase, TTaskLike, Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
@@ -761,8 +771,26 @@ Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Cor
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],T] TaskBuilderBase.Using[TResource,TOverall,T](Microsoft.FSharp.Control.TaskBuilderBase, TResource, Microsoft.FSharp.Core.FSharpFunc`2[TResource,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],T]])
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom$W[TTaskLike,TAwaiter,T](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike,TAwaiter], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,T], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,System.Boolean], Microsoft.FSharp.Control.TaskBuilderBase, TTaskLike)
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom[TTaskLike,TAwaiter,T](Microsoft.FSharp.Control.TaskBuilderBase, TTaskLike)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, TTaskLike2)
Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2] TaskBuilderBase.Bind[TResult1,TOverall,TResult2](Microsoft.FSharp.Control.TaskBuilderBase, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom[T](Microsoft.FSharp.Control.TaskBuilderBase, Microsoft.FSharp.Control.FSharpAsync`1[T])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
Microsoft.FSharp.Control.TaskBuilderModule: Microsoft.FSharp.Control.BackgroundTaskBuilder backgroundTask
Microsoft.FSharp.Control.TaskBuilderModule: Microsoft.FSharp.Control.BackgroundTaskBuilder get_backgroundTask()
Microsoft.FSharp.Control.TaskBuilderModule: Microsoft.FSharp.Control.TaskBuilder get_task()
diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.debug.bsl b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.debug.bsl
index a49aac19aaa..95ebeea8a37 100644
--- a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.debug.bsl
+++ b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.debug.bsl
@@ -757,6 +757,16 @@ Microsoft.FSharp.Control.TaskBuilderBase: Microsoft.FSharp.Core.CompilerServices
Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: Boolean TaskBuilderBase.BindDynamic.Static[TOverall,TResult1,TResult2](Microsoft.FSharp.Core.CompilerServices.ResumableStateMachine`1[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall]] ByRef, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2] TaskBuilderBase.Bind[TResult1,TOverall,TResult2](Microsoft.FSharp.Control.TaskBuilderBase, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom[T](Microsoft.FSharp.Control.TaskBuilderBase, System.Threading.Tasks.Task`1[T])
+Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Boolean TaskBuilderBase.BindDynamic.Static$W[TTaskLike,TResult1,TResult2,TAwaiter,TOverall](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike,TAwaiter], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,System.Boolean], Microsoft.FSharp.Core.CompilerServices.ResumableStateMachine`1[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall]] ByRef, TTaskLike, Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Boolean TaskBuilderBase.BindDynamic.Static[TTaskLike,TResult1,TResult2,TAwaiter,TOverall](Microsoft.FSharp.Core.CompilerServices.ResumableStateMachine`1[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall]] ByRef, TTaskLike, Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2] TaskBuilderBase.Bind$W[TTaskLike,TResult1,TResult2,TAwaiter,TOverall](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike,TAwaiter], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,System.Boolean], Microsoft.FSharp.Control.TaskBuilderBase, TTaskLike, Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
@@ -764,8 +774,26 @@ Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Cor
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],T] TaskBuilderBase.Using[TResource,TOverall,T](Microsoft.FSharp.Control.TaskBuilderBase, TResource, Microsoft.FSharp.Core.FSharpFunc`2[TResource,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],T]])
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom$W[TTaskLike,TAwaiter,T](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike,TAwaiter], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,T], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,System.Boolean], Microsoft.FSharp.Control.TaskBuilderBase, TTaskLike)
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom[TTaskLike,TAwaiter,T](Microsoft.FSharp.Control.TaskBuilderBase, TTaskLike)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, TTaskLike2)
Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2] TaskBuilderBase.Bind[TResult1,TOverall,TResult2](Microsoft.FSharp.Control.TaskBuilderBase, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom[T](Microsoft.FSharp.Control.TaskBuilderBase, Microsoft.FSharp.Control.FSharpAsync`1[T])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
Microsoft.FSharp.Control.TaskBuilderModule: Microsoft.FSharp.Control.BackgroundTaskBuilder backgroundTask
Microsoft.FSharp.Control.TaskBuilderModule: Microsoft.FSharp.Control.BackgroundTaskBuilder get_backgroundTask()
Microsoft.FSharp.Control.TaskBuilderModule: Microsoft.FSharp.Control.TaskBuilder get_task()
diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.release.bsl b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.release.bsl
index b17d1201a5a..c4106d360c4 100644
--- a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.release.bsl
+++ b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.release.bsl
@@ -757,6 +757,16 @@ Microsoft.FSharp.Control.TaskBuilderBase: Microsoft.FSharp.Core.CompilerServices
Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: Boolean TaskBuilderBase.BindDynamic.Static[TOverall,TResult1,TResult2](Microsoft.FSharp.Core.CompilerServices.ResumableStateMachine`1[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall]] ByRef, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2] TaskBuilderBase.Bind[TResult1,TOverall,TResult2](Microsoft.FSharp.Control.TaskBuilderBase, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom[T](Microsoft.FSharp.Control.TaskBuilderBase, System.Threading.Tasks.Task`1[T])
+Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.HighPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], TTaskLike2)
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Boolean TaskBuilderBase.BindDynamic.Static$W[TTaskLike,TResult1,TResult2,TAwaiter,TOverall](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike,TAwaiter], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,System.Boolean], Microsoft.FSharp.Core.CompilerServices.ResumableStateMachine`1[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall]] ByRef, TTaskLike, Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Boolean TaskBuilderBase.BindDynamic.Static[TTaskLike,TResult1,TResult2,TAwaiter,TOverall](Microsoft.FSharp.Core.CompilerServices.ResumableStateMachine`1[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall]] ByRef, TTaskLike, Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2] TaskBuilderBase.Bind$W[TTaskLike,TResult1,TResult2,TAwaiter,TOverall](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike,TAwaiter], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,System.Boolean], Microsoft.FSharp.Control.TaskBuilderBase, TTaskLike, Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
@@ -764,8 +774,26 @@ Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Cor
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],T] TaskBuilderBase.Using[TResource,TOverall,T](Microsoft.FSharp.Control.TaskBuilderBase, TResource, Microsoft.FSharp.Core.FSharpFunc`2[TResource,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],T]])
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom$W[TTaskLike,TAwaiter,T](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike,TAwaiter], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,T], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter,System.Boolean], Microsoft.FSharp.Control.TaskBuilderBase, TTaskLike)
Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom[TTaskLike,TAwaiter,T](Microsoft.FSharp.Control.TaskBuilderBase, TTaskLike)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike1,TTaskLike2,TResult1,TResult2,TAwaiter1,TAwaiter2](Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, TTaskLike2)
Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2] TaskBuilderBase.Bind[TResult1,TOverall,TResult2](Microsoft.FSharp.Control.TaskBuilderBase, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TResult1,Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[TOverall],TResult2]])
Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: Microsoft.FSharp.Core.CompilerServices.ResumableCode`2[Microsoft.FSharp.Control.TaskStateMachineData`1[T],T] TaskBuilderBase.ReturnFrom[T](Microsoft.FSharp.Control.TaskBuilderBase, Microsoft.FSharp.Control.FSharpAsync`1[T])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.BackgroundTaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] BackgroundTaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.BackgroundTaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike1,TAwaiter1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,TResult1], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter1,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources$W[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Core.FSharpFunc`2[TTaskLike2,TAwaiter2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,TResult2], Microsoft.FSharp.Core.FSharpFunc`2[TAwaiter2,System.Boolean], Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, Microsoft.FSharp.Control.FSharpAsync`1[TResult1], System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TResult1,TResult2](Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], Microsoft.FSharp.Control.FSharpAsync`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike1,TResult1,TResult2,TAwaiter1](Microsoft.FSharp.Control.TaskBuilder, TTaskLike1, System.Threading.Tasks.Task`1[TResult2])
+Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority: System.Threading.Tasks.Task`1[System.ValueTuple`2[TResult1,TResult2]] TaskBuilder.MergeSources[TTaskLike2,TResult1,TResult2,TAwaiter2](Microsoft.FSharp.Control.TaskBuilder, System.Threading.Tasks.Task`1[TResult1], TTaskLike2)
Microsoft.FSharp.Control.TaskBuilderModule: Microsoft.FSharp.Control.BackgroundTaskBuilder backgroundTask
Microsoft.FSharp.Control.TaskBuilderModule: Microsoft.FSharp.Control.BackgroundTaskBuilder get_backgroundTask()
Microsoft.FSharp.Control.TaskBuilderModule: Microsoft.FSharp.Control.TaskBuilder get_task()
diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/Tasks.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/Tasks.fs
index cce271d58bb..f60a3562f75 100644
--- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/Tasks.fs
+++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/Tasks.fs
@@ -183,6 +183,179 @@ type SmokeTestsForCompilation() =
t.Wait()
if t.Result <> 5 then failwith "failed"
+ []
+ member _.merge2tasks() =
+ task {
+ let! x = Task.FromResult(1)
+ and! y = Task.FromResult(2)
+ return x + y
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 3 then failwith "failed"
+
+ []
+ member _.merge3tasks() =
+ task {
+ let! x = Task.FromResult(1)
+ and! y = Task.FromResult(2)
+ and! z = Task.FromResult(3)
+ return x + y + z
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 6 then failwith "failed"
+
+ []
+ member _.mergeYieldAndTask() =
+ task {
+ let! _ = Task.Yield()
+ and! y = Task.FromResult(1)
+ return y
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 1 then failwith "failed"
+
+ []
+ member _.mergeTaskAndYield() =
+ task {
+ let! x = Task.FromResult(1)
+ and! _ = Task.Yield()
+ return x
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 1 then failwith "failed"
+
+ []
+ member _.merge2valueTasks() =
+ task {
+ let! x = ValueTask(Task.FromResult(1))
+ and! y = ValueTask(Task.FromResult(2))
+ return x + y
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 3 then failwith "failed"
+
+ []
+ member _.merge2valueTasksAndYield() =
+ task {
+ let! x = ValueTask(Task.FromResult(1))
+ and! y = ValueTask(Task.FromResult(2))
+ and! _ = Task.Yield()
+ return x + y
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 3 then failwith "failed"
+
+ []
+ member _.mergeYieldAnd2tasks() =
+ task {
+ let! _ = Task.Yield()
+ and! x = Task.FromResult(1)
+ and! y = Task.FromResult(2)
+ return x + y
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 3 then failwith "failed"
+
+ []
+ member _.merge2tasksAndValueTask() =
+ task {
+ let! x = Task.FromResult(1)
+ and! y = Task.FromResult(2)
+ and! z = ValueTask(Task.FromResult(3))
+ return x + y + z
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 6 then failwith "failed"
+
+ []
+ member _.merge2asyncs() =
+ task {
+ let! x = async { return 1 }
+ and! y = async { return 2 }
+ return x + y
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 3 then failwith "failed"
+
+ []
+ member _.merge3asyncs() =
+ task {
+ let! x = async { return 1 }
+ and! y = async { return 2 }
+ and! z = async { return 3 }
+ return x + y + z
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 6 then failwith "failed"
+
+ []
+ member _.mergeYieldAndAsync() =
+ task {
+ let! _ = Task.Yield()
+ and! y = async { return 1 }
+ return y
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 1 then failwith "failed"
+
+ []
+ member _.mergeAsyncAndYield() =
+ task {
+ let! x = async { return 1 }
+ and! _ = Task.Yield()
+ return x
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 1 then failwith "failed"
+
+ []
+ member _.mergeYieldAnd2asyncs() =
+ task {
+ let! _ = Task.Yield()
+ and! x = async { return 1 }
+ and! y = async { return 2 }
+ return x + y
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 3 then failwith "failed"
+
+ []
+ member _.merge2asyncsAndValueTask() =
+ task {
+ let! x = async { return 1 }
+ and! y = async { return 2 }
+ and! z = ValueTask(Task.FromResult(3))
+ return x + y + z
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 6 then failwith "failed"
+
+ []
+ member _.mergeBackgroundTask() =
+ backgroundTask {
+ let! x = async { return 1 }
+ and! y = task { return 2 }
+ and! z = ValueTask(Task.FromResult(3))
+ return x + y + z
+ }
+ |> fun t ->
+ t.Wait()
+ if t.Result <> 6 then failwith "failed"
+
exception TestException of string
[]
@@ -296,6 +469,33 @@ type Basics() =
require (y = 1) "bailed after exn"
require (x = 0) "ran past failure"
+ []
+ member _.testCatchingInApplicative() =
+ printfn "Running testCatchingInApplicative..."
+ let mutable x = 0
+ let mutable y = 0
+ let t =
+ task {
+ try
+ let! _ = task {
+ do! Task.Delay(100)
+ x <- 1
+ }
+ and! _ = task {
+ failtest "hello"
+ }
+ ()
+ with
+ | TestException msg ->
+ require (msg = "hello") "message tampered"
+ | _ ->
+ require false "other exn type"
+ y <- 1
+ }
+ t.Wait()
+ require (y = 1) "bailed after exn"
+ require (x = 1) "exit too early"
+
[]
member _.testNestedCatching() =
printfn "Running testNestedCatching..."
diff --git a/tests/ILVerify/ilverify_FSharp.Core_Debug_netstandard2.0.bsl b/tests/ILVerify/ilverify_FSharp.Core_Debug_netstandard2.0.bsl
index 4e6bca186fd..7f00cdfe046 100644
--- a/tests/ILVerify/ilverify_FSharp.Core_Debug_netstandard2.0.bsl
+++ b/tests/ILVerify/ilverify_FSharp.Core_Debug_netstandard2.0.bsl
@@ -1,3 +1,23 @@
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x0000000E][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x00000016][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x0000000E][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x00000016][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x0000000E][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x00000016][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x0000000E][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x00000016][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, !!1)][offset 0x0000000E][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, !!1)][offset 0x00000016][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, !!1)][offset 0x0000000E][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, !!1)][offset 0x00000016][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Collections.ArrayModule+Parallel::Choose([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>, !!0[])][offset 0x000000A0][found Byte] Unexpected type on the stack.
[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Collections.ArrayModule+Parallel::Filter([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, !!0[])][offset 0x00000029][found Byte] Unexpected type on the stack.
[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Collections.ArrayModule+Parallel::Partition([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, !!0[])][offset 0x00000038][found Byte] Unexpected type on the stack.
diff --git a/tests/ILVerify/ilverify_FSharp.Core_Debug_netstandard2.1.bsl b/tests/ILVerify/ilverify_FSharp.Core_Debug_netstandard2.1.bsl
index 4e6bca186fd..7f00cdfe046 100644
--- a/tests/ILVerify/ilverify_FSharp.Core_Debug_netstandard2.1.bsl
+++ b/tests/ILVerify/ilverify_FSharp.Core_Debug_netstandard2.1.bsl
@@ -1,3 +1,23 @@
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x0000000E][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x00000016][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x0000000E][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x00000016][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x0000000E][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x00000016][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x0000000E][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x00000016][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, !!1)][offset 0x0000000E][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, !!1)][offset 0x00000016][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, !!1)][offset 0x0000000E][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, !!1)][offset 0x00000016][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Collections.ArrayModule+Parallel::Choose([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>, !!0[])][offset 0x000000A0][found Byte] Unexpected type on the stack.
[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Collections.ArrayModule+Parallel::Filter([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, !!0[])][offset 0x00000029][found Byte] Unexpected type on the stack.
[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Collections.ArrayModule+Parallel::Partition([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, !!0[])][offset 0x00000038][found Byte] Unexpected type on the stack.
diff --git a/tests/ILVerify/ilverify_FSharp.Core_Release_netstandard2.0.bsl b/tests/ILVerify/ilverify_FSharp.Core_Release_netstandard2.0.bsl
index 6ab50914fdd..05a10ae7797 100644
--- a/tests/ILVerify/ilverify_FSharp.Core_Release_netstandard2.0.bsl
+++ b/tests/ILVerify/ilverify_FSharp.Core_Release_netstandard2.0.bsl
@@ -1,3 +1,23 @@
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x0000000E][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x00000016][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x0000000E][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x00000016][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x0000000E][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x00000016][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x0000000E][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x00000016][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, !!1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, !!1)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, !!1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, !!1)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Collections.ArrayModule+Parallel::Choose([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>, !!0[])][offset 0x00000081][found Byte] Unexpected type on the stack.
[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Collections.ArrayModule+Parallel::Filter([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, !!0[])][offset 0x00000029][found Byte] Unexpected type on the stack.
[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Collections.ArrayModule+Parallel::Partition([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, !!0[])][offset 0x00000038][found Byte] Unexpected type on the stack.
diff --git a/tests/ILVerify/ilverify_FSharp.Core_Release_netstandard2.1.bsl b/tests/ILVerify/ilverify_FSharp.Core_Release_netstandard2.1.bsl
index 6ab50914fdd..05a10ae7797 100644
--- a/tests/ILVerify/ilverify_FSharp.Core_Release_netstandard2.1.bsl
+++ b/tests/ILVerify/ilverify_FSharp.Core_Release_netstandard2.1.bsl
@@ -1,3 +1,23 @@
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x0000000E][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x00000016][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x0000000E][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPlusPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1)][offset 0x00000016][found ref '[FSharp.Core]Microsoft.FSharp.Control.FSharpAsync`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x0000000E][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x00000016][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x0000000E][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, [S.P.CoreLib]System.Threading.Tasks.Task`1, !!0)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.MediumPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, [S.P.CoreLib]System.Threading.Tasks.Task`1)][offset 0x00000016][found ref '[S.P.CoreLib]System.Threading.Tasks.Task`1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, !!1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::TaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.TaskBuilder, !!0, !!1)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, !!1)][offset 0x0000000E][found value 'TTaskLike1'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
+[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Control.TaskBuilderExtensions.LowPriority::BackgroundTaskBuilder.MergeSources$W([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, [FSharp.Core]Microsoft.FSharp.Control.BackgroundTaskBuilder, !!0, !!1)][offset 0x00000016][found value 'TTaskLike2'][expected ref '[FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2'] Unexpected type on the stack.
[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Collections.ArrayModule+Parallel::Choose([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2>, !!0[])][offset 0x00000081][found Byte] Unexpected type on the stack.
[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Collections.ArrayModule+Parallel::Filter([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, !!0[])][offset 0x00000029][found Byte] Unexpected type on the stack.
[IL]: Error [StackUnexpected]: : Microsoft.FSharp.Collections.ArrayModule+Parallel::Partition([FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2, !!0[])][offset 0x00000038][found Byte] Unexpected type on the stack.