{"id":27171378,"url":"https://github.com/tankerhq/tconcurrent","last_synced_at":"2026-03-16T16:38:57.317Z","repository":{"id":97667723,"uuid":"160529898","full_name":"TankerHQ/tconcurrent","owner":"TankerHQ","description":"Tanker coroutine library","archived":false,"fork":false,"pushed_at":"2024-08-27T08:27:23.000Z","size":555,"stargazers_count":7,"open_issues_count":0,"forks_count":2,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-08-27T09:44:13.105Z","etag":null,"topics":["coroutine-library","cpp"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TankerHQ.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-05T14:24:19.000Z","updated_at":"2024-08-27T08:27:27.000Z","dependencies_parsed_at":"2024-08-27T09:43:26.665Z","dependency_job_id":"49e3ff90-1afc-4d25-9b88-537226d0c10c","html_url":"https://github.com/TankerHQ/tconcurrent","commit_stats":null,"previous_names":[],"tags_count":128,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TankerHQ%2Ftconcurrent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TankerHQ%2Ftconcurrent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TankerHQ%2Ftconcurrent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TankerHQ%2Ftconcurrent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TankerHQ","download_url":"https://codeload.github.com/TankerHQ/tconcurrent/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248003753,"owners_count":21031860,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["coroutine-library","cpp"],"created_at":"2025-04-09T08:33:46.497Z","updated_at":"2026-03-16T16:38:52.291Z","avatar_url":"https://github.com/TankerHQ.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"#readme\"\u003e\u003cimg src=\"https://tanker.io/images/github-logo.png\" alt=\"Tanker logo\" width=\"180\" /\u003e\u003c/a\u003e\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\n# Tanker coroutine library\n\n## Table of Contents\n\n * [Overview](#overview)\n * [Setup](#setup)\n * [Doc](#Doc)\n * [Contributing](#contributing)\n * [License and Terms](#license-and-terms)\n\n## Overview\n\ntconcurrent is a coroutine library that allows writing asynchronous code that is\nboth C++14 and coroutines-TS-compatible.\n\nThe coroutines are stackful when compiled in C++14 mode and stackless when\nusing the coroutines-TS mode.\n\n### Example\n\ntconcurrent exposes an `async_resumable` function that will run a coroutine\nasynchronously. A coroutine function must return a `tc::cotask` and can then use\nthe `TC_AWAIT` and `TC_RETURN` macros.\n\n```c++\nint main()\n{\n  // Run an asynchronous task, like `std::async`\n  tc::future\u003cstd::string\u003e f1 = tc::async([]() -\u003e std::string {\n    return \"42\";\n  });\n\n  // Run a resumable asynchronous task\n  tc::future\u003cint\u003e f2 = tc::async_resumable([]() -\u003e tc::cotask\u003cint\u003e {\n    int const val = TC_AWAIT(receive_value());\n    TC_AWAIT(send_value(val * 2));\n    TC_RETURN(42);\n  });\n\n  f1.get();\n  f2.get();\n}\n```\n\n### Setup\n\nWe are actively working to allow external developers to build and test this SDK\nfrom its source.\n\n### Doxygen\n\nTo generate and open documentation:\n\n```\n$ cd doc \u0026\u0026 doxygen \u0026\u0026 xdg-open build/html/index.html\n```\n\n## Documentation\n\nTo better understand how tconcurrent works, a big picture explanation is here:\n\n- [Async primitives](doc/1-async-primitives.md)\n- [Coroutines](doc/2-coroutines.md)\n- [Task canceler](doc/3-task-canceler.md)\n\n## Contributing\n\nWe welcome feedback. Feel free to open any issue on the Github bug tracker.\n\n## License and Terms\n\nThe tconcurrent library is licensed under the\n[Apache License, version 2.0](http://www.apache.org/licenses/LICENSE-2.0).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftankerhq%2Ftconcurrent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftankerhq%2Ftconcurrent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftankerhq%2Ftconcurrent/lists"}