Durable Functions: mapeamento de API de trabalho isolado em processo

Essa referência fornece um mapeamento abrangente entre o SDK em processo (2.x) e o SDK de trabalho isolado para Durable Functions. Use esta página junto com o guia de migração ao atualizar seu código.

APIs do cliente

Em processo (2.x) Trabalhador isolado
IDurableOrchestrationClient DurableTaskClient
IDurableOrchestrationClient.StartNewAsync DurableTaskClient.ScheduleNewOrchestrationInstanceAsync
IDurableOrchestrationClient.GetStatusAsync DurableTaskClient.GetInstanceAsync
IDurableOrchestrationClient.ListInstancesAsync DurableTaskClient.GetAllInstancesAsync
IDurableOrchestrationClient.TerminateAsync DurableTaskClient.TerminateInstanceAsync
IDurableOrchestrationClient.SuspendAsync DurableTaskClient.SuspendInstanceAsync
IDurableOrchestrationClient.ResumeAsync DurableTaskClient.ResumeInstanceAsync
IDurableOrchestrationClient.RaiseEventAsync DurableTaskClient.RaiseEventAsync
IDurableOrchestrationClient.RewindAsync DurableTaskClient.RewindInstanceAsync
IDurableOrchestrationClient.RestartAsync DurableTaskClient.RestartAsync
IDurableOrchestrationClient.PurgeInstanceHistoryAsync DurableTaskClient.PurgeInstanceAsync ou PurgeAllInstancesAsync
IDurableOrchestrationClient.CreateCheckStatusResponse DurableTaskClient.CreateCheckStatusResponseAsync (método de extensão, leva HttpRequestData)
IDurableOrchestrationClient.WaitForCompletionOrCreateCheckStatusResponseAsync DurableTaskClient.WaitForCompletionOrCreateCheckStatusResponseAsync (método de extensão, timeout substituído por CancellationToken)
IDurableOrchestrationClient.CreateHttpManagementPayload DurableTaskClient.CreateHttpManagementPayload (método de extensão)
DurableOrchestrationStatus OrchestrationMetadata
DurableOrchestrationStatus.History Removido do objeto de status. Use DurableTaskClient.GetOrchestrationHistoryAsync em seu lugar.
PurgeHistoryResult PurgeResult
OrchestrationStatusQueryCondition OrchestrationQuery
OrchestrationStatusQueryResult AsyncPageable<OrchestrationMetadata>

APIs de cliente removidas

As seguintes APIs em processo não têm equivalentes no SDK de trabalho isolado:

API removida Workaround
IDurableOrchestrationClient.MakeCurrentAppPrimaryAsync Nenhum equivalente
IDurableOrchestrationClient.GetStatusAsync(IEnumerable<string>) Usar GetInstanceAsync em um loop ou GetAllInstancesAsync com um filtro de consulta
IDurableOrchestrationClient.PurgeInstanceHistoryAsync(IEnumerable<string>) Usar PurgeInstanceAsync em um loop ou PurgeAllInstancesAsync com um filtro
Sobrecargas entre hubs de tarefas (RaiseEventAsync, ReadEntityStateAsyncSignalEntityAsynccomconnectionNametaskHubName/ ) Há suporte apenas para operações do mesmo hub de tarefas

APIs de cliente de entidade

Em processo (2.x) Trabalhador isolado
IDurableEntityClient.SignalEntityAsync DurableTaskClient.Entities.SignalEntityAsync
IDurableEntityClient.ReadEntityStateAsync DurableTaskClient.Entities.GetEntityAsync
IDurableEntityClient.ListEntitiesAsync DurableTaskClient.Entities.GetAllEntitiesAsync
IDurableEntityClient.CleanEntityStorageAsync DurableTaskClient.Entities.CleanEntityStorageAsync (usa CleanEntityStorageRequest objeto em vez de parâmetros bool)

APIs de contexto de orquestração

Em processo (2.x) Trabalhador isolado
IDurableOrchestrationContext TaskOrchestrationContext
IDurableOrchestrationContext.InstanceId TaskOrchestrationContext.InstanceId
IDurableOrchestrationContext.Name TaskOrchestrationContext.Name
IDurableOrchestrationContext.CurrentUtcDateTime TaskOrchestrationContext.CurrentUtcDateTime
IDurableOrchestrationContext.IsReplaying TaskOrchestrationContext.IsReplaying
IDurableOrchestrationContext.NewGuid TaskOrchestrationContext.NewGuid
IDurableOrchestrationContext.GetInput<T>() TaskOrchestrationContext.GetInput<T>() ou injete a entrada como um parâmetro: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
IDurableOrchestrationContext.SetOutput Removido. Use o valor retornado da função do orquestrador.
IDurableOrchestrationContext.CallActivityAsync TaskOrchestrationContext.CallActivityAsync
IDurableOrchestrationContext.CallActivityWithRetryAsync TaskOrchestrationContext.CallActivityAsync com um TaskOptions parâmetro para detalhes de repetição
IDurableOrchestrationContext.CallSubOrchestratorAsync TaskOrchestrationContext.CallSubOrchestratorAsync
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync TaskOrchestrationContext.CallSubOrchestratorAsync com um TaskOptions parâmetro para detalhes de repetição
IDurableOrchestrationContext.ContinueAsNew TaskOrchestrationContext.ContinueAsNew (consulte alterações comportamentais para diferenças padrão)
IDurableOrchestrationContext.CallHttpAsync TaskOrchestrationContext.CallHttpAsync
IDurableOrchestrationContext.CreateTimer<T>(DateTime, T, CancellationToken) TaskOrchestrationContext.CreateTimer(DateTime, CancellationToken). Parâmetro de estado removido.
IDurableOrchestrationContext.WaitForExternalEvent(string) (não genérico) Removido. Use WaitForExternalEvent<T>(string, CancellationToken).
IDurableOrchestrationContext.WaitForExternalEvent<T>(string, TimeSpan, T) (com defaultValue) Removido. Use WaitForExternalEvent<T>(string, TimeSpan, CancellationToken), que lança TaskCanceledException o tempo limite.
IDurableOrchestrationContext.ParentInstanceId TaskOrchestrationContext.Parent.InstanceId
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) TaskOrchestrationContext.CreateReplaySafeLogger<T>() ou TaskOrchestrationContext.CreateReplaySafeLogger(string)
IDurableOrchestrationContext.CreateEntityProxy<T> Removido. Use Entities.CallEntityAsync ou Entities.SignalEntityAsync diretamente.
IDurableOrchestrationContext.CallEntityAsync TaskOrchestrationContext.Entities.CallEntityAsync
IDurableOrchestrationContext.SignalEntity TaskOrchestrationContext.Entities.SignalEntityAsync
IDurableOrchestrationContext.LockAsync TaskOrchestrationContext.Entities.LockEntitiesAsync
IDurableOrchestrationContext.IsLocked TaskOrchestrationContext.Entities.InCriticalSection()
RetryOptions TaskOptions com TaskRetryOptions
DurableActivityContext Nenhum equivalente
DurableActivityContext.GetInput<T>() Insira a entrada como um parâmetro: MyActivity([ActivityTrigger] T input)
DurableHttpRequest (Namespace WebJobs) DurableHttpRequest (namespace Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Http)
DurableHttpResponse (Namespace WebJobs) DurableHttpResponse (namespace Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Http)

APIs de entidade

Em processo (2.x) Trabalhador isolado
IDurableEntityContext TaskEntityContext
IDurableEntityContext.EntityName TaskEntityContext.Id.Name
IDurableEntityContext.EntityKey TaskEntityContext.Id.Key
IDurableEntityContext.OperationName TaskEntityOperation.Name
IDurableEntityContext.FunctionBindingContext Removido. Adicione FunctionContext como um parâmetro de entrada.
IDurableEntityContext.HasState TaskEntityOperation.State.HasState
IDurableEntityContext.GetState TaskEntityOperation.State.GetState
IDurableEntityContext.SetState TaskEntityOperation.State.SetState
IDurableEntityContext.DeleteState TaskEntityOperation.State.SetState(null)
IDurableEntityContext.GetInput TaskEntityOperation.GetInput
IDurableEntityContext.Return Removido. Em vez disso, use o valor retornado do método.
IDurableEntityContext.SignalEntity TaskEntityContext.SignalEntity. Os sinais agendados utilizam SignalEntityOptions.SignalTime em vez de uma sobrecarga de parâmetro DateTime.
IDurableEntityContext.StartNewOrchestration TaskEntityContext.ScheduleNewOrchestration. O ID da instância é configurado via StartOrchestrationOptions.InstanceId em vez de por um parâmetro de cadeia de caracteres.
IDurableEntityContext.DispatchAsync TaskEntityDispatcher.DispatchAsync. Parâmetros do construtor removidos; em vez disso, use DI padrão.
IDurableEntityContext.BatchSize Removido
IDurableEntityContext.BatchPosition Removido

Alterações comportamentais

Examine essas alterações de comportamento de falha antes de testar seu aplicativo migrado.

Padrão de serialização alterado

O serializador padrão foi alterado de Newtonsoft.Json para System.Text.Json. Para obter opções de configuração, consulte Serialização e persistência em Durable Functions.

Aviso

Alteração padrão ContinueAsNew: o preserveUnprocessedEvents padrão do parâmetro foi alterado de false (2.x) para true (isolado). Se a orquestração usar ContinueAsNew e depender do descarte de eventos não processados, passe preserveUnprocessedEvents: false explicitamente.

Note

Alteração padrão do RestartAsync: o padrão do parâmetro restartWithNewInstanceId foi alterado de true (2.x) para false (isolado). Se o código chamar RestartAsync e depender de um novo ID de instância a ser gerado, passe restartWithNewInstanceId: true explicitamente.

Outras alterações comportamentais

  • Remoção de proxy de entidade: CreateEntityProxy<T> e as sobrecargas de delegado digitadas SignalEntityAsync<TEntityInterface>(Action<T>) não estão disponíveis no trabalho isolado. Chame Entities.CallEntityAsync ou Entities.SignalEntityAsync diretamente com nomes de operação baseados em cadeia de texto, em vez de usar interfaces de proxy tipadas.
  • WaitForCompletionOrCreateCheckStatusResponseAsync: o timeout parâmetro foi removido. Em vez disso, use um CancellationToken com um tempo limite de cancelamento.
  • Operações entre hubs de tarefas removidas: as sobrecargas em processo aceitas taskHubName e connectionName os parâmetros não estão disponíveis no trabalho isolado. Há suporte apenas para operações do mesmo hub de tarefas.
  • Operações em lote por ID removidas: as sobrecargas e PurgeInstanceHistoryAsync(IEnumerable<string>) o processo GetStatusAsync(IEnumerable<string>) não estão disponíveis. Use GetAllInstancesAsync com um OrchestrationQuery filtro ou chame GetInstanceAsync/PurgeInstanceAsync individualmente.
  • O histórico de orquestração foi movido: DurableOrchestrationStatus.History (o embutido JArray) não faz mais parte do objeto de status. Use a API separada DurableTaskClient.GetOrchestrationHistoryAsync .
  • Parâmetros do construtor Entity DispatchAsync removidos: as classes de entidade são ativadas por meio da injeção de dependência padrão. Registre as dependências de sua entidade em Program.cs.
  • Alterações de filtro de consulta de entidade: EntityQuery.EntityName é substituído por EntityQuery.InstanceIdStartsWith, e EntityQuery.IncludeDeleted é substituído por .EntityQuery.IncludeTransient
  • Alteração da assinatura CleanEntityStorageAsync: usa um CleanEntityStorageRequest objeto com RemoveEmptyEntities e ReleaseOrphanedLocks propriedades em vez de parâmetros bool.
  • Novas APIs no trabalho isolado: DurableTaskClient.GetOrchestrationHistoryAsync e o método de TaskOrchestrationContext.GetFunctionContext() extensão não têm equivalente em processo.