在使用C#4.0的dotNET中,我如何确保在任意线程X上发生的事件将在与订阅线程A,B或C相同的线程(或同步上下文)中调用处理程序。
我试图避免将与线程相关的代码放入处理程序方法或事件站点。
如果我不必更改+ =和 - =订阅以及“公共事件EventHandler myevent”,那将是非常好的。代码。
答案 0 :(得分:1)
我不认为你可以直接这样做。您可以做的最好的是注册处理程序,它将在某个任意线程上运行,但会将数据传递给原始线程。
答案 1 :(得分:0)
目前可以使用object CountriesTypeFactory : TypeAdapterFactory {
override fun <T : Any?> create(gson: Gson?, type: TypeToken<T>?): TypeAdapter<T>? {
val delegate = gson?.getDelegateAdapter(this, type)
val elementAdapter = gson?.getAdapter(JsonElement::class.java)
return object : TypeAdapter<T>() {
@Throws(IOException::class)
override fun write(outjs: JsonWriter, value: T) {
delegate?.write(outjs, value)
}
@Throws(IOException::class)
override fun read(injs: JsonReader): T {
var jsonElement = elementAdapter!!.read(injs)
if (jsonElement.isJsonObject) {
val jsonObject = jsonElement.asJsonObject
if (jsonObject.has("countries") && jsonObject.get("countries").isJsonArray) {
jsonElement = jsonObject.get("countries")
}
}
return delegate!!.fromJsonTree(jsonElement)
}
}.nullSafe()
}
}
和async / await的默认行为结合使用,将事物带回调用同步上下文。