Open-Awesome
CategoriesAlternativesStacksSelf-HostedExplore
Open-Awesome

© 2026 Open-Awesome. Curated for the developer elite.

TermsPrivacyAboutGitHubRSS
  1. Home
  2. F#
  3. FSharp.Control.FusionTasks

FSharp.Control.FusionTasks

NOASSERTIONF#

A library providing seamless interoperability between F# Async workflows and .NET Task/ValueTask for mixed-language asynchronous programming.

GitHubGitHub
160 stars13 forks0 contributors

What is FSharp.Control.FusionTasks?

FSharp.Control.FusionTasks is a library that enables seamless interoperability between F#'s Async workflows and .NET's Task/ValueTask models. It allows F# developers to directly await .NET Tasks within async blocks and lets C# developers await F# Async computations, solving the friction when mixing asynchronous code across these two .NET languages.

Target Audience

F# and C# developers working on mixed-language codebases, library authors who need to expose async APIs consumable from both languages, and teams integrating .NET OSS packages that use Task/ValueTask into F# projects.

Value Proposition

It provides a lightweight, intuitive bridge between the two async models without requiring manual boilerplate conversions, supports modern async features like IAsyncEnumerable and ValueTask, and works across a wide range of .NET platforms from .NET Framework 4.5 to .NET 6.

Overview

F# Async workflow <--> .NET Task/ValueTask easy seamless interoperability library.

Use Cases

Best For

  • Calling .NET library async methods (Task/ValueTask) directly from F# async workflows
  • Exposing F# async computations to C# code as awaitable Tasks
  • Building mixed F#/C# applications with shared asynchronous logic
  • Using IAsyncEnumerable<T> sequences within F# async for loops
  • Integrating with .NET OSS packages that expose Task-based APIs in F# projects
  • Writing LINQPad scripts that combine F# async and .NET Task operations

Not Ideal For

  • Projects relying on custom 'task-like' async types beyond Task and ValueTask, as FusionTasks only supports standard .NET async models.
  • Scenarios requiring explicit, fine-grained control over CancellationToken propagation in F# async workflows, since it relies on implicit handling.
  • Environments targeting .NET versions below 4.6.1 or .NET Standard 1.6 where IAsyncEnumerable support is unavailable, limiting feature use.
  • Teams prioritizing minimal dependencies for async interoperability, preferring manual conversions or built-in F# tools over third-party libraries.

Pros & Cons

Pros

Seamless Task Integration

Allows direct use of Task/ValueTask with let!, do!, and use! in F# async blocks, eliminating manual Async.AwaitTask conversions as shown in sample code for MemoryStream operations.

Bidirectional Interoperability

Enables C# code to await F# Async computations directly, simplifying mixed-language projects without extra boilerplate, demonstrated in C# sample code awaiting FSharpAsync.Sleep.

Modern Async Feature Support

Integrates IAsyncEnumerable<T> in F# for loops and IAsyncDisposable in use expressions, supporting .NET's latest asynchronous patterns as highlighted in the features list.

Wide Platform Compatibility

Works across .NET Framework 4.5 to .NET 6, F# 4.5 to 6.0, and various .NET Core versions, ensuring broad applicability as detailed in the environments chart.

Cons

Limited to Standard Async Types

Cannot support arbitrary 'task-like' types beyond Task and ValueTask due to .NET limitations, restricting use with custom async models as explained in the appendix.

Implicit CancellationToken Handling

In F# async workflows, CancellationToken is handled implicitly, which may not suit scenarios needing explicit token propagation, as noted in the README's TIPS section on manual conversion.

Requires Type Annotations

Compiler conflicts between Async and Task types can necessitate type annotations in async workflows, adding complexity as mentioned in the TIPS section with FS0041 errors.

Dependency on External Packages

For IAsyncEnumerable support, it relies on Microsoft.Bcl.AsyncInterfaces, introducing an extra dependency and limiting compatibility to specific .NET versions as outlined in the notes.

Frequently Asked Questions

Quick Stats

Stars160
Forks13
Contributors0
Open Issues2
Last commit4 years ago
CreatedSince 2016

Tags

#asynchronous-programming#async-await#csharp#async#dotnet#interoperability#task-parallelism#concurrency#fsharp#net-standard#task

Built With

.
.net-framework
.
.NET Core
F
F#
.
.NET Standard
.
.NET

Included in

F#1.4k
Auto-fetched 1 day ago

Related Projects

HopacHopac

http://hopac.github.io/Hopac/Hopac.html

Stars535
Forks62
Last commit4 years ago
PlyPly

High performance System.Threading.(Value)Task computation expressions for F#

Stars245
Forks16
Last commit3 years ago
TaskBuilder.fsTaskBuilder.fs

F# computation expression builder for System.Threading.Tasks

Stars235
Forks27
Last commit17 days ago
FSharp.Control.AsyncSeqFSharp.Control.AsyncSeq

Asynchronous sequences for F#

Stars175
Forks54
Last commit13 days ago
Community-curated · Updated weekly · 100% open source

Found a gem we're missing?

Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.

Submit a projectStar on GitHub