C# StreamInsight:只有在Task.Run()块中传递X时,才能序列化类型X的值
我使用Microsoft.ComplexEventProcessing.Application的DefineObservable创建了一个IQStreamable对象 代码看起来正常,但我不明白的是,当我使用Task.Run中传入的参数时,我遇到了一个异常 但是,当我直接使用该属性而不将其传递到Task.Run中的方法时,它起了作用 例外情况 Microsoft.ComplexeventProcess.Diagnostics.dll中发生类型为“System.InvalidOperationException”的未处理异常 其他信息:无法序列化“System.IObservable”1[ValueObjects.Price]类型的值 方法 问题: StreamInsight是否序列化观察者对象?为什么 两者有什么不同 这个 .DefineObservable=>PriceObservable 及 这个 DefineObservable=>PriceRealtimeProvider.Instance.PriceObservable 为什么使用arugument会导致问题 是的,但我仍然不知道最初的设计和原因。 对于此调用:.DefineObservable=>PriceObservable。这意味着参数在应用程序内存中。参数需要序列化才能传递到远程服务器。因此,在此之后,参数实际上位于StreamInsight服务器内存中。由于参数是接口类型,因此无法序列化该参数。 对于此调用:DefineObservable=>PriceRealtimeProvider.Instance.PriceObservable,我猜,这被视为一个委托调用,因此Instance.PriceObservable尚未实例化,直到StreamInsight server调用代码。发生这种情况时,所有内容都在StreamInsight服务器内存中。所以不需要序列化 总之,第二次调用不会发生序列化 我愿意改正C# StreamInsight:只有在Task.Run()块中传递X时,才能序列化类型X的值,c#,serialization,task-parallel-library,streaminsight,C#,Serialization,Task Parallel Library,Streaminsight,我使用Microsoft.ComplexEventProcessing.Application的DefineObservable创建了一个IQStreamable对象 代码看起来正常,但我不明白的是,当我使用Task.Run中传入的参数时,我遇到了一个异常 但是,当我直接使用该属性而不将其传递到Task.Run中的方法时,它起了作用 例外情况 Microsoft.ComplexeventProcess.Diagnostics.dll中发生类型为“System.InvalidOperationEx
private void Monitor(IObservable<Price> priceObservable)
{
const string applicationName = "RealtimeMonitoring";
Microsoft.ComplexEventProcessing.Application application = PriceObserver.Server.CreateApplication(applicationName);
IQStreamable<Price> sStreamable = application
//.DefineObservable<Price>(() => PriceRealtimeProvider.Instance.PriceObservable)
.DefineObservable<Price>(() => PriceObservable)
.ToPointStreamable( => PointEvent<Price>.CreateInsert(DateTime.Now, price), AdvanceTimeSettings.IncreasingStartTime);
var standingQuery = from p in streamable select price ;
var sink = application.DefineObserver(() => new PriceObserver());
using (standingQuery.Bind(sink).Run())
{
// some code...
}
}
Task.Run(()=>Monitor(PriceRealtimeProvider.Instance.PriceObservable)