Skip to content

Update AV1820: Only use async for I/O-bound or long-running activities#376

Open
dennisdoomen wants to merge 1 commit intodevelopfrom
copilot/pr298-update-av1820
Open

Update AV1820: Only use async for I/O-bound or long-running activities#376
dennisdoomen wants to merge 1 commit intodevelopfrom
copilot/pr298-update-av1820

Conversation

@dennisdoomen
Copy link
Copy Markdown
Owner

This PR updates guideline AV1820.

It was split out of #298 so the change can be reviewed independently.

Files:

  • _rules/1820.md

Part of the replacement for #298.

Split from #298.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
rule_id: 1820
rule_category: performance
title: Only use `async` for low-intensive long-running activities
title: Only use `async` for I/O-bound or long-running activities
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
title: Only use `async` for I/O-bound or long-running activities
title: Only use `async`/`await` for I/O-bound operations

It's unclear what "long-running activity" refers to. If it's I/O-bound, then yes. If it's CPU-bound, then no.

severity: 1
---
The usage of `async` won't automagically run something on a worker thread like `Task.Run` does. It just adds the necessary logic to allow releasing the current thread, and marshal the result back on that same thread if a long-running asynchronous operation has completed. In other words, use `async` only for I/O bound operations.
The usage of `async` won't automagically run something on a worker thread like `Task.Run` does. It just adds the necessary logic to allow releasing the current thread, and marshal the result back on that same thread if a long-running asynchronous operation has completed. In other words, use `async` only for I/O-bound operations.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The usage of `async` won't automagically run something on a worker thread like `Task.Run` does. It just adds the necessary logic to allow releasing the current thread, and marshal the result back on that same thread if a long-running asynchronous operation has completed. In other words, use `async` only for I/O-bound operations.
The use of `async`/`await` won't automagically run something on a worker thread as `Task.Run` does. It just suspends execution at the await point and resumes execution after the task has completed. In other words, use `async`/`await` only for I/O-bound operations.

Technically, async and await are distinct concepts, but I'm trying to keep it simple here. Execution doesn't always resume on the same thread, so I left that part out.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants