Postsharp: ThreadAffineAttribute и асинхронный метод - PullRequest
1 голос
/ 10 мая 2019

Этот метод выдает ошибку: 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 ]

1 голос
/ 26 июня 2019

Если, согласно вашим комментариям, вам не нужно, чтобы ваш объект был связан с потоками, а вместо этого нужно убедиться, что к нему в любой момент времени может обращаться только один поток, вы можете вместо этого использовать модель потоков Actor ( https://doc.postsharp.net/actor).

Другая модель многопоточности, которая может работать для вас, - это Синхронизированная (https://doc.postsharp.net/synchronized),, которая по сути является эксклюзивной блокировкой.

1 голос
/ 11 мая 2019

Если вам нужны async аффинно-зависимые типы, они могут быть вызваны только из однопоточных контекстов, например, из пользовательского интерфейса или AsyncContext.

Однако крайне редко требуется async для аффинного типа потока. Я бы пересмотрел требование сродства нитей.

...