Я недавно разработал много асинхронного кода и, следуя общим рекомендациям, я реализую свои коды асинхронной библиотеки, чтобы они вызывали .ConfigureAwait(false);
для ожидаемых задач. Я почти уверен, что любой, кто когда-либо делал это, может относиться к тому, насколько это может повторяться, поэтому я немного подумал над определением своего фрагмента, чтобы полуавтоматизировать его несколькими нажатиями клавиш.
То, что я придумал, настолько просто, насколько это возможно, но, к сожалению, Visual Studio не позволяет мне использовать его так, как я ожидал. Это мой фрагмент:
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>ConfigureAwait(false) call</Title>
<Shortcut>caf</Shortcut>
</Header>
<Snippet>
<Code Language="CSharp">
<![CDATA[.ConfigureAwait(false);$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
Когда я пытаюсь вставить его, например, в пустое тело метода, или после любого «готового» фрагмента кода (например, присваивания с ;
в конце), он раскрывается правильно, но когда я пытаюсь вставить его туда, где это действительно имеет смысл, например, незавершенный асинхронный вызов метода, например, следующий:
await MyMethodAsync()/* would type "caf" and tab-tab" */
тогда ничего не происходит. Всплывающее окно IntelliSense при вызове в этом месте также не содержит никаких других фрагментов, поэтому я сильно подозреваю, что VS просто не кодируется для поддержки фрагментов в определенных лексических контекстах, таких как этот. Однако это всего лишь предположение - кто-то может подтвердить, возможно ли это / невозможно?