想了解c#–Task.Yield是否真的在当前上下文中运行了continuation?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于c#当前上下文中不存在的相关问题,此外,我们还将为您介绍
想了解c# – Task.Yield是否真的在当前上下文中运行了continuation?的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于c#当前上下文中不存在的相关问题,此外,我们还将为您介绍关于Abp'FeatureManagementPermissions'在当前上下文中不存在、AnnotationConfigApplicationContext和父上下文、ASP.net MVC C# 当前上下文中不存在名称 "viewbag"、asp.net-core – 当前上下文中不存在名称“SqlServerValueGenerationStrategy”的新知识。
本文目录一览:- c# – Task.Yield是否真的在当前上下文中运行了continuation?(c#当前上下文中不存在)
- Abp'FeatureManagementPermissions'在当前上下文中不存在
- AnnotationConfigApplicationContext和父上下文
- ASP.net MVC C# 当前上下文中不存在名称 "viewbag"
- asp.net-core – 当前上下文中不存在名称“SqlServerValueGenerationStrategy”
c# – Task.Yield是否真的在当前上下文中运行了continuation?(c#当前上下文中不存在)
> Awaitables(例如Task)可以捕获或不捕获当前的SynchronizationContext.
> SynchronizationContext大致对应一个线程:如果我在UI线程上并调用await任务,即“流上下文”,则继续在UI线程上运行.如果我调用await task.ConfigureAwait(false),则继续在某个随机线程池线程上运行,该线程可能是/可能不是UI线程.
>对于awaiters:OnCompleted流上下文,而UnsafeOnCompleted不流动上下文.
好了,有了这个,我们来看看Roslyn为等待Task.Yield()生成的代码.这个:
using System; using System.Threading.Tasks; public class C { public async void M() { await Task.Yield(); } }
这个编译器生成的代码的结果(你可以自己验证here):
public class C { [CompilerGenerated] [StructLayout(LayoutKind.Auto)] private struct <M>d__0 : IAsyncStateMachine { public int <>1__state; public AsyncVoidMethodBuilder <>t__builder; private YieldAwaitable.YieldAwaiter <>u__1; void IAsyncStateMachine.MoveNext() { int num = this.<>1__state; try { YieldAwaitable.YieldAwaiter yieldAwaiter; if (num != 0) { yieldAwaiter = Task.Yield().GetAwaiter(); if (!yieldAwaiter.IsCompleted) { num = (this.<>1__state = 0); this.<>u__1 = yieldAwaiter; this.<>t__builder.AwaitUnsafeOnCompleted<YieldAwaitable.YieldAwaiter,C.<M>d__0>(ref yieldAwaiter,ref this); return; } } else { yieldAwaiter = this.<>u__1; this.<>u__1 = default(YieldAwaitable.YieldAwaiter); num = (this.<>1__state = -1); } yieldAwaiter.GetResult(); yieldAwaiter = default(YieldAwaitable.YieldAwaiter); } catch (Exception arg_6E_0) { Exception exception = arg_6E_0; this.<>1__state = -2; this.<>t__builder.SetException(exception); return; } this.<>1__state = -2; this.<>t__builder.SetResult(); } [DebuggerHidden] void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine stateMachine) { this.<>t__builder.SetStateMachine(stateMachine); } } [AsyncStateMachine(typeof(C.<M>d__0))] public void M() { C.<M>d__0 <M>d__; <M>d__.<>t__builder = AsyncVoidMethodBuilder.Create(); <M>d__.<>1__state = -1; AsyncVoidMethodBuilder <>t__builder = <M>d__.<>t__builder; <>t__builder.Start<C.<M>d__0>(ref <M>d__); } }
请注意,使用awaiter而不是AwaitOnCompleted调用AwaitUnsafeOnCompleted.反过来,AwaitUnsafeOnCompleted在awaiter上调用UnsafeOnCompleted
. YieldAwaiter does not在UnsafeOnCompleted中流动当前上下文.
这真让我困惑,因为this question似乎暗示Task.Yield确实捕获了当前的上下文;提问者很沮丧,因为缺乏一个没有的版本.所以我很困惑:产量是否捕获当前的背景?
如果没有,我怎么强迫它?我在UI线程上调用这个方法,我真的需要继续在UI线程上运行. YieldAwaitable缺少一个ConfigureAwait()方法,因此我无法编写等待Task.Yield().ConfigureAwait(true).
谢谢!
解决方法
ExecutionContext
is not the same as the context captured by await
(which is usually a SynchronizationContext
).
总而言之,必须始终为开发人员代码提供ExecutionContext;否则是一个安全问题.存在某些情况(例如,在编译器生成的代码中),其中编译器知道不流动是安全的(即,它将由另一机制流动).这基本上就是在这种情况下发生的事情,as traced by Peter.
但是,这与await捕获的上下文(当前的SynchronizationContext或TaskScheduler)没有任何关系.查看logic in YieldAwaiter.QueueContinuation
:如果有当前的SynchronizationContext或TaskScheduler,则始终使用它并忽略flowContext参数.这是因为flowContext参数仅指流动ExecutionContext而不是SynchronizationContext / TaskScheduler.
相比之下,the task awaiters end up at Task.SetContinuationForAwait
具有两个bool参数:continueOnCapturedContext用于确定是否捕获await上下文(SynchronizationContext或TaskScheduler),以及flowExecutionContext用于确定是否需要流动ExecutionContext.
Abp'FeatureManagementPermissions'在当前上下文中不存在
如何解决Abp''FeatureManagementPermissions''在当前上下文中不存在?
我正在使用Abp,并且从模板文件夹运行应用程序项目。它工作正常,但我在租户部分遇到了问题。实际上,当我单击“租户管理”部分时,出现此错误
abp\modules\tenant-management\src\Volo.Abp.TenantManagement.Web\Pages\TenantManagement\Tenants\Index.cshtml
The name ''FeatureManagementPermissions'' does not exist in the current context
+
@if (await Authorization.IsGrantedAsync(FeatureManagementPermissions.ManageHostFeatures))
解决方法
我应该尝试运行build-all.ps1。 https://github.com/abpframework/abp/blob/dev/build/build-all.ps1
AnnotationConfigApplicationContext和父上下文
我在尝试使用定义上下文层次结构时遇到问题AnnotationConfigApplicationContext
。
问题是在内部定义模块上下文beanRefContext.xml
并使用另一个上下文(基于XML / Annotated)设置’parent’属性时。
例:
模块A中的beanRefContext.xml
<bean id =“ moduleA_ApplicationContext”
class =“ org.springframework.context.support.ClassPathXmlApplicationContext”>
<property name =“ configLocations”>
<列表>
<value> classpath:db-context.xml </ value>
</ list>
</ property>
</ bean>
db-context.xml
<bean id =“ dataSource”
class =“ org.apache.commons.dbcp.BasicDataSource”
destroy-method =“ close”
p:driverClassName =“ org.h2.Driver”
p:url =“ jdbc:h2:mem:testdb; DB_CLOSE_DELAY = -1; MODE = MySQL; TRACE_LEVEL_SYSTEM_OUT = 2” />
<!-休眠会话工厂->
<bean name =“ sessionFactory”
class =“ org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean”>
<property name =“ dataSource” ref =“ dataSource” />
<property name =“ useTransactionAwareDataSource” value =“ true” />
<property name =“ packagesToScan”>
<列表>
<value> com.example.model </ value>
</ list>
</ property>
<property name =“ hibernateProperties”>
<!-冬眠道具->
</ property>
</ bean>
模块B中的beanRefContext.xml
<bean id =“ moduleB_ApplicationContext”
class =“ org.springframework.context.annotation.AnnotationConfigApplicationContext”>
<property name =“ parent” ref =“ moduleA_ApplicationContext” />
<constructor-arg>
<列表>
<value> com.example.dao </ value>
</ list>
</ constructor-arg>
</ bean>
冬眠道
FooHibernateDao类实现FooDao {
@Autowired
@Qualifier(“ sessionFactory”)
私有SessionFactory sessionFactory;
// CRUD方法
}
模块B应用程序上下文无法找到在模块A应用程序上下文中定义的bean。
从代码AnnotationConfigApplicationContext
看,扫描过程似乎没有使用父对象作为解析bean的参考。
我有做错什么吗,或者使用注释配置无法创建层次结构?
ASP.net MVC C# 当前上下文中不存在名称 "viewbag"
出现的错误如下:
错误 2 当前上下文中不存在名称 “model” e:\Stuff\projects\ 蓝狐软件工作室 \src\Lanhu.Admin\Views\Student\Index.cshtml 3 2 Lanhu.Admin
错误 7 “System.Web.WebPages.Html.HtmlHelper” 不包含 “BeginForm” 的定义,并且找不到可接受类型为 “System.Web.WebPages.Html.HtmlHelper” 的第一个参数的扩展方法 “BeginForm”(是否缺少 using 指令或程序集引用?) e:\Stuff\projects\ 蓝狐软件工作室 \src\Lanhu.Admin\Views\Student\Index.cshtml 12 26 Lanhu.Admin
错误 9 当前上下文中不存在名称 “ViewBag” e:\Stuff\projects\ 蓝狐软件工作室 \src\Lanhu.Admin\Views\Student\Index.cshtml 16 115 Lanhu.Admin
错误 11 当前上下文中不存在名称 “Url” e:\Stuff\projects\ 蓝狐软件工作室 \src\Lanhu.Admin\Views\Student\Index.cshtml 48 47 Lanhu.Admin
错误 12 “System.Web.WebPages.Html.HtmlHelper” 不包含 “BeginForm” 的定义,并且找不到可接受类型为 “System.Web.WebPages.Html.HtmlHelper” 的第一个参数的扩展方法 “BeginForm”(是否缺少 using 指令或程序集引用?) e:\Stuff\projects\ 蓝狐软件工作室 \src\Lanhu.Admin\Views\Student\Index.cshtml 49 50 Lanhu.Admin
解决办法 删除 C:\Users\(用户名)\AppData\Local\Microsoft\VisualStudio\(版本)\ComponentModelCache 文件夹.
asp.net-core – 当前上下文中不存在名称“SqlServerValueGenerationStrategy”
Add-Migration MOBAPP -Project OVMInfrastructure Update-Database
当我运行update-database时,我收到此错误:
The name “sqlServerValueGenerationStrategy” does not exist in the current context
我重新安装了以下Nuget包
Microsoft.EntityFrameworkCore.sqlServer
但它仍然无法正常工作.
Click here to see my error picture.
解决方法
>在JSAInfrastructure中安装Microsoft.EntityFrameworkCore版本2.1.0包
>在JSAInfrastructure中安装Microsoft.EntityFrameworkCore.Relational版本2.1.0包
>在JSAInfrastructure中安装Microsoft.EntityFrameworkCore.sqlServer版本2.1.0包
>在JSAAPI中将Microsoft.EntityFrameworkCore.sqlServer更新为2.1.0版
>构建您的项目
Result
今天关于c# – Task.Yield是否真的在当前上下文中运行了continuation?和c#当前上下文中不存在的介绍到此结束,谢谢您的阅读,有关Abp'FeatureManagementPermissions'在当前上下文中不存在、AnnotationConfigApplicationContext和父上下文、ASP.net MVC C# 当前上下文中不存在名称 "viewbag"、asp.net-core – 当前上下文中不存在名称“SqlServerValueGenerationStrategy”等更多相关知识的信息可以在本站进行查询。
本文标签: