Code Monkey home page Code Monkey logo

awaitableobject's Introduction

AwaitableObject

A library that lets you wrap and await any awaitable object in C#.

NOTE: This library is slower than direct await about 10~12 times, this will cause a huge performance impact when sensitive to async/await performance .

Usage

object obj = ...;
await AwaitableWrapper.Wrap(obj);

object obj = Task.FromResult(1);
int result = await AwaitableWrapper.Wrap<int>(obj);

How is works?

  1. Check object type, throw if incoming object is not awaitable.
  2. Call 'GetAwaiter' method and box return value to object.
  3. Wrap, generate and cache OnComplete,get_IsCompleted,GetResult from the awaiter which returned from GetAwaiter method.
  4. Create AwaiterWrapper object and pass cached methods to it.

Benchmark

| Method                       | Mean       | Error     | StdDev    |
|----------------------------- |-----------:|----------:|----------:|
| DirectAwaitTask              |   9.996 ns | 0.0746 ns | 0.0661 ns |
| WrappedTask                  | 101.225 ns | 2.0640 ns | 2.1196 ns |
| DirectAwaitValueTask         |   9.233 ns | 0.0876 ns | 0.0732 ns |
| WrappedValueTask             | 111.555 ns | 2.1622 ns | 2.1236 ns |

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.