Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Esta referência fornece um mapeamento abrangente entre o SDK em processo (2.x) e o SDK trabalhador isolado para Durable Functions. Use esta página juntamente com o guia de migração ao atualizar o seu código.
APIs de 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, toma 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 estado. Utilize DurableTaskClient.GetOrchestrationHistoryAsync em substituição. |
PurgeHistoryResult |
PurgeResult |
OrchestrationStatusQueryCondition |
OrchestrationQuery |
OrchestrationStatusQueryResult |
AsyncPageable<OrchestrationMetadata> |
APIs de cliente removidas
As seguintes APIs em processo não têm equivalentes no trabalhador SDK isolado:
| API removida | Workaround |
|---|---|
IDurableOrchestrationClient.MakeCurrentAppPrimaryAsync |
Sem equivalente |
IDurableOrchestrationClient.GetStatusAsync(IEnumerable<string>) |
Usar GetInstanceAsync num ciclo ou GetAllInstancesAsync com um filtro de consulta |
IDurableOrchestrationClient.PurgeInstanceHistoryAsync(IEnumerable<string>) |
Uso PurgeInstanceAsync em loop ou PurgeAllInstancesAsync com filtro |
Sobrecargas entre centros de tarefas (RaiseEventAsync, SignalEntityAsync, ReadEntityStateAsync com/taskHubNameconnectionName ) |
Apenas operações no mesmo centro de tarefas são suportadas |
APIs de clientes de entidades
| 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 injetar entrada como parâmetro: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input) |
IDurableOrchestrationContext.SetOutput |
Removido. Utilize o valor de retorno da função orquestradora. |
IDurableOrchestrationContext.CallActivityAsync |
TaskOrchestrationContext.CallActivityAsync |
IDurableOrchestrationContext.CallActivityWithRetryAsync |
TaskOrchestrationContext.CallActivityAsync com um TaskOptions parâmetro para detalhes de retentativa |
IDurableOrchestrationContext.CallSubOrchestratorAsync |
TaskOrchestrationContext.CallSubOrchestratorAsync |
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync |
TaskOrchestrationContext.CallSubOrchestratorAsync com um TaskOptions parâmetro para detalhes de retentativa |
IDurableOrchestrationContext.ContinueAsNew |
TaskOrchestrationContext.ContinueAsNew (ver 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. Utilize WaitForExternalEvent<T>(string, CancellationToken). |
IDurableOrchestrationContext.WaitForExternalEvent<T>(string, TimeSpan, T) (com defaultValue) |
Removido. Usa WaitForExternalEvent<T>(string, TimeSpan, CancellationToken), que lança TaskCanceledException em caso de timeout. |
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 |
Sem equivalente |
DurableActivityContext.GetInput<T>() |
Inserir a entrada como parâmetro: MyActivity([ActivityTrigger] T input) |
DurableHttpRequest (Espaço de nomes WebJobs) |
DurableHttpRequest (Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Http namespace) |
DurableHttpResponse (Espaço de nomes WebJobs) |
DurableHttpResponse (Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Http namespace) |
APIs de entidades
| 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. Adicionar FunctionContext como 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. Use o valor de retorno do método em vez disso. |
IDurableEntityContext.SignalEntity |
TaskEntityContext.SignalEntity. Os sinais agendados usam SignalEntityOptions.SignalTime em vez de sobrecarga de parâmetro DateTime. |
IDurableEntityContext.StartNewOrchestration |
TaskEntityContext.ScheduleNewOrchestration. O ID da instância é definido usando StartOrchestrationOptions.InstanceId, em vez de um parâmetro de string. |
IDurableEntityContext.DispatchAsync |
TaskEntityDispatcher.DispatchAsync. Parâmetros do construtor removidos; use DI padrão em vez disso. |
IDurableEntityContext.BatchSize |
Removed |
IDurableEntityContext.BatchPosition |
Removed |
Mudanças comportamentais
Revise estas alterações de comportamento disruptivas antes de testar a sua aplicação migrada.
Alteração do padrão de serialização
O serializador padrão mudou de Newtonsoft.Json para System.Text.Json. Para opções de configuração, veja Serialização e persistência em Durable Functions.
Aviso
ContinueAsNew mudança padrão: O preserveUnprocessedEvents parâmetro padrão mudou de false (2.x) para true (isolado). Se a sua orquestração usar ContinueAsNew e depender de que eventos não processados sejam descartados, passe preserveUnprocessedEvents: false explicitamente.
Note
Alteração do padrão RestartAsync: O restartWithNewInstanceId padrão do parâmetro mudou de true (2.x) para false (isolado). Se o seu código chamar RestartAsync e depender de ser gerado um novo ID de instância, passe explicitamente restartWithNewInstanceId: true.
Outras alterações comportamentais
-
Remoção de proxy de entidade:
CreateEntityProxy<T>e as sobrecargas de delegadosSignalEntityAsync<TEntityInterface>(Action<T>)tipados não estão disponíveis no trabalhador isolado. LigueEntities.CallEntityAsyncouEntities.SignalEntityAsyncdiretamente usando nomes de operações em formato de string em vez de usar interfaces proxy tipadas. -
WaitForCompletionOrCreateCheckStatusResponseAsync: O
timeoutparâmetro foi removido. Usa umCancellationTokencom um tempo limite de cancelamento em vez disso. -
Operações de cross-task-hub removidas: As sobrecargas em processo que aceitavam
taskHubNameos parâmetros econnectionNamenão estão disponíveis no trabalhador isolado. Apenas operações no mesmo centro de tarefas são suportadas. -
Operações em lote por ID removidas: As operações em processo
GetStatusAsync(IEnumerable<string>)ePurgeInstanceHistoryAsync(IEnumerable<string>)as sobrecargas não estão disponíveis. UseGetAllInstancesAsynccom umOrchestrationQueryfiltro ou chameGetInstanceAsync/PurgeInstanceAsyncindividualmente. -
Histórico de orquestração transferido:
DurableOrchestrationStatus.History(o incorporadoJArray) já não faz parte do objeto de estado. Usa a API separadaDurableTaskClient.GetOrchestrationHistoryAsync. -
Parágrafos construtores Entity DispatchAsync removidos: As classes de entidade são ativadas através da injeção padrão de dependências. Registe as dependências da sua entidade em
Program.cs. -
O filtro de consulta da entidade muda:
EntityQuery.EntityNameé substituído porEntityQuery.InstanceIdStartsWith, eEntityQuery.IncludeDeletedé substituído porEntityQuery.IncludeTransient. -
Mudança de assinatura CleanEntityStorageAsync: Aceita um
CleanEntityStorageRequestobjeto comRemoveEmptyEntitiespropriedades eReleaseOrphanedLocksem vez de parâmetros bool. -
Novas APIs no trabalhador isolado:
DurableTaskClient.GetOrchestrationHistoryAsynce noTaskOrchestrationContext.GetFunctionContext()método de extensão não têm equivalente em processo.