How to write a type-eraser for @MainActor method?

the error:
Converting non-sendable function value to '@MainActor @Sendable () -> String' may introduce data races

on the line
self._fetch = fetcher.fetch

It works if I make DataFetcher Sendable, or if I store the DataFetcher object directly (as in AnyDataFetcherSolution2)

Any other solutions?

I do not see the difference between AnyDataFetcherSolution2 and AnyDataFetcher. If AnyDataFetcher may have race condition, so is AnyDataFetcherSolution2.

// Define a protocol for the result type
protocol DataFetcher {
    @MainActor
    func fetch() -> String
}

// A type-erased wrapper
struct AnyDataFetcher: DataFetcher {
    private let _fetch: @MainActor () -> String

    init<T: DataFetcher>(_ fetcher: T) {
        self._fetch = fetcher.fetch
    }

    func fetch() -> String {
        return  _fetch()
    }
}

// This works
struct AnyDataFetcherSolution2: DataFetcher {

    private let anyDataFetcher: any DataFetcher
  
    init<T: DataFetcher>(_ fetcher: T) {
        self.anyDataFetcher = fetcher
    }

    func fetch() -> String {
        return  self.anyDataFetcher.fetch()
    }
}