Re[42]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 01.09.21 09:28
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, Serginio1, Вы писали:


S>>Ну сейчас сделано как итератор с MoveNext.


V>Сейчас при создании экземпляра асинхронного автомата обязательно создаётся делегат, а это дорого.

V>Теперь есть возможность не создавать этот делегат.
Ну как здесь пишут https://habr.com/ru/post/260217/ возвращает он интерфейс IAsyncStateMachine с двумя методами
https://docs.microsoft.com/ru-ru/dotnet/api/system.runtime.compilerservices.iasyncstatemachine?view=net-5.0

MoveNext()
Перемещает конечный автомат в его следующее состояние.
SetStateMachine(IAsyncStateMachine)
Настраивает конечный автомат с размещенной в куче репликой.


Состояние то это класс. Кроме адреса функции нужно еще и ссылку на класс.
Хотя в Delphi для обмана Win Api и COM генерили методы заглушки где в регистр записывался this для Api, а для COM корректировалось смещение, так как интерфейсов много и для каждого интерфейса генерировалась своя тлб со ссылкой на интерфейс просто поле со смещением от реального this
В .Net так нельзя но сделать
public struct Merhod<T,Y>
{
public  T obj;
public  Func<Y> func
}


Пусть обзовут не делегатом и вызывают напрямую как метод объекта

Кстати можно посмотреть на селекторы
https://docs.microsoft.com/ru-ru/xamarin/ios/internals/architecture

Во-первых, необходимо предоставить способ доступа Objective-C к C#, который выполняется с помощью селекторов. Селектор — это сообщение, которое отправляется объекту или классу. Objective-C Это делается с помощью функций objc_msgSend . Дополнительные сведения об использовании селекторов см. в руководстве по средствам Objective-C выбора . Также должен быть способ предоставления управляемого кода Objective-C , который более сложен из-за того факта, что Objective-C нет ничего знать об управляемом коде. Чтобы обойти это, мы используем Registrars . Эти сведения более подробно описаны в следующем разделе.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 01.09.2021 10:28 Serginio1 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.