后锐:ThreadAffineAttribute和异步方法

时间:2019-05-10 20:37:08

标签: postsharp

此方法引发错误:An attempt was made to access the object from an invalid thread.

如果我被遣散了Task.Delay,那就行了。

但是我需要异步方法才能工作。

public async Task<int> Test() {
    await Task.Delay( 100 );
    return 0;
}

2 个答案:

答案 0 :(得分:1)

如果根据您的评论,您不需要将对象绑定到线程,而是需要确保在任何给定时刻仅一个线程可以访问该对象,则可以考虑使用Actor线程模型( https://doc.postsharp.net/actor

另一种可能适合您的线程模型是同步(https://doc.postsharp.net/synchronized),它基本上是互斥锁。

答案 1 :(得分:0)

如果您需要async个线程仿射类型,则只能从单线程上下文(例如,UI上下文或AsyncContext)中调用它们。

但是,在线程仿射类型上需要async极为罕见。我会重新考虑线程亲和性要求。