AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-509627

David Thielen's questions

Martin Hope
David Thielen
Asked: 2024-09-18 10:30:30 +0800 CST

Blazor - como posso forçar uma atualização de uma variável para um componente subjacente

  • 5

Tenho um componente que abrirá uma caixa de diálogo perguntando se você tem certeza de que deseja descartar as alterações ao alternar para uma página diferente. Coloquei em cada página da seguinte forma:

<ConfirmNavigation HasUnsavedChanges="@HasUnsavedChanges" />

E este componente inclui:

[Parameter]
public bool HasUnsavedChanges { get; set; }

private async Task OnBeforeInternalNavigation(LocationChangingContext context)
{
    if (!HasUnsavedChanges)
        return;

Meu problema é que na página pai, manipulando o clique de envio, eu tenho:

HasUnsavedChanges = false;
await Task.Delay(1);
Navigation.NavigateTo(gotoUrl);

Isso não funciona. O método retorna depois dessas 2 linhas de código e ConfirmNavigationainda considera HasUnsavedChangestrue.

Existe uma maneira de fazer algo para que o valor alterado de HasUnsavedChangeso torne ConfirmNavigation? Minha melhor aposta é adicionar um método para ConfirmNavigationque defina o valor? Não gosto disso porque está contornando o HasUnsavedChanges="@HasUnsavedChanges"que viola como os componentes devem interagir.

blazor-server-side
  • 1 respostas
  • 28 Views
Martin Hope
David Thielen
Asked: 2024-09-17 05:44:44 +0800 CST

Por que o Application Insights não está mostrando eventos

  • 5

Isto é para um aplicativo Blazor Interactive Server. Eu o adiciono ao aplicativo usando:

builder.Logging.AddApplicationInsights();
builder.Services.AddApplicationInsightsTelemetry();

Em seguida, adiciono um evento usando:

// class members
[Inject] 
protected TelemetryClient TelemetryClient { get; set; } = default!;

// bunch of code runs

var stopwatch = System.Diagnostics.Stopwatch.StartNew();
// bunch of code runs
stopwatch.Stop();
TelemetryClient.TrackMetric("Signup calendar get events", stopwatch.ElapsedMilliseconds);

Em seguida, enviei isso para o aplicativo, fui até ele e cliquei nas páginas que fariam com que o comando acima TrackMetric()fosse chamado.

Então fui para Application Insights | Activity log e ele mostra... Slot Security events. Nada mais . Eu configurei o recurso para o slot dev do meu servidor de aplicativos, que é o que eu quero medir.

Uma coisa estranha sobre isso é que um recurso que posso selecionar ApplicationInsights-devé o Application Insights em que estou. Isso faz sentido, que ele possa estar olhando para si mesmo?

O que estou entendendo errado nisso?

  • 1 respostas
  • 31 Views
Martin Hope
David Thielen
Asked: 2024-08-23 00:37:33 +0800 CST

Como posso declarar um nome de propriedade dinâmica começando com @

  • 6

Preciso criar o seguinte JSON:

 {
      "@context": "https://schema.org",
      "@type": "Event",
      "name": "The Adventures of Kira and Morrison",
      "startDate": "2025-07-21T19:00-05:00",
      "endDate": "2025-07-21T23:00-05:00",

Então eu escrevi o seguinte C#

private MarkupString JsonLdEvent
{
    get
    {
        dynamic data = new
        {
            @context = "https://schema.org",
            @type = "Event",
            name = Data?.Subject,
            startDate = Data?.UnderlyingEvent?.StartDateTime.DateTimeOffset,
            endDate = Data?.UnderlyingEvent?.EndDateTime.DateTimeOffset,
        };

        var json = JsonConvert.SerializeObject(data, Formatting.Indented);
        return new MarkupString(json);
    }
}

O problema é que o JSON gerado "context": "https://schema.org"não "@context": "https://schema.org". Existe uma maneira de definir a propriedade como @context?

Atualização: se você encontrar exatamente esse problema - é necessário criar objetos Schema.Org - há uma biblioteca .NET que fornece isso (solução de @David).

c#
  • 1 respostas
  • 38 Views
Martin Hope
David Thielen
Asked: 2024-07-27 04:37:44 +0800 CST

Entity Framework Core: Select() - altera o nome de uma coluna

  • 2

Tenho o seguinte select:

var allUsers = await dbContext.AppUsers
    .Where(u => allUserIds.Contains(u.IdentityUsersId))
    .Include(u => u.Following)
    .Select(u => new
    {
        u.Name,
        u.Email,
        u.Phone!.FormattedNumber,
        u.Following
    })
    .ToListAsync();

Ele retorna um objeto onde a terceira propriedade é nomeada FormattedNumber. Existe uma maneira de nomear a propriedade PhoneNumber?

Atualização: adicionei C# como uma tag porque agora que vejo a resposta, esta é mais uma questão de objetos dinâmicos. E acho que esta é uma sessão de perguntas e respostas útil para mostrar como os objetos dinâmicos são definidos em uma seleção do EF.

c#
  • 1 respostas
  • 27 Views
Martin Hope
David Thielen
Asked: 2024-07-27 04:36:00 +0800 CST

Entity Framework Core: Select() - transformar uma propriedade IList<> em uma string unida?

  • 2

Tenho o seguinte select que retorna as 4 colunas que desejo:

var allUsers = await dbContext.AppUsers
    .Where(u => allUserIds.Contains(u.IdentityUsersId))
    .Include(u => u.Following)
    .Select(u => new
    {
        u.Name,
        u.Email,
        u.Phone!.FormattedNumber,
        u.Following
    })
    .ToListAsync();

No entanto , Followingé um arquivo List<Organization>. O que eu quero é o Organization.Name. Existe uma maneira de fazer com que, no select, retorne um List<string>?

E se sim, existe uma maneira de, em vez de ser um List<string>, pode ser um stringque é um string.Join()de todos os nomes?

Atualização: adicionei C# como uma tag porque agora que vejo a resposta, este é um objeto dinâmico usado pela pergunta do Entity Frameworks. E acho que esta é uma sessão de perguntas e respostas útil para mostrar como objetos dinâmicos podem ser usados ​​em uma seleção de EF.

c#
  • 1 respostas
  • 33 Views
Martin Hope
David Thielen
Asked: 2024-02-08 02:33:14 +0800 CST

O que o usuário está “representando” em um convite do Outlook

  • 4

Na biblioteca do MsgKit para criar um .msgconvite, estão o Remetente, o Destinatário e o arquivo Representing. Assim como o Remetente, há exatamente 1 Representando. Está documentado como:

Essas propriedades são exemplos de propriedades de endereço para o usuário do sistema de mensagens que está sendo representado pelo usuário MsgKit.Reception. Devem ser definidos pelo fornecedor de transporte de entrada, que também é responsável pela autorização ou verificação do delegado. Se nenhum usuário do sistema de mensagens estiver sendo representado, essas propriedades deverão ser configuradas para o endereço de email contido na propriedade PR_RECEIVED_BY_EMAIL_ADDRESS (PidTagReceivedByEmailAddress).

Alguma ideia de quem/o que é isso?

outlook
  • 2 respostas
  • 20 Views
Martin Hope
David Thielen
Asked: 2023-12-22 03:52:02 +0800 CST

Por que não posso retornar um método Task assíncrono do meu método Task assíncrono?

  • 5

Eu tenho um método:

private async Task CopyFormInfoToSourceObject(SchedulerAppointmentOperationEventArgs arg)
{
// lots of code
}

E quero chamá-lo da seguinte forma:

private async Task AppointmentInserting(SchedulerAppointmentOperationEventArgs arg)
{
    return CopyFormInfoToSourceObject(arg);
}

Mas isso não será compilado. Diz que os tipos de retorno não correspondem e o assíncrono não é necessário.

Não entendo por que isso não compila. O tipo de retorno é async Taskpara ambos.

c#
  • 1 respostas
  • 61 Views
Martin Hope
David Thielen
Asked: 2023-12-21 02:36:02 +0800 CST

A cor do pino dos mapas do Azure está errada

  • 5

Usando Azure.Maps.Rendering, estou definindo as cores dos pinos e dos rótulos. A cor do rótulo funciona bem. Mas a cor do pino, embora mude com base na configuração, não corresponde à configuração. Por exemplo, para o seguinte código:

var pushpinSet = new ImagePushpinStyle(new List<PushpinPosition>() { position })
{
    PushpinScaleRatio = 0.8, //1.2,
    PushpinColor = Color.Red,
    LabelColor = Color.Green,
    LabelScaleRatio = 10 //18
};

Eu pego o mapa:

insira a descrição da imagem aqui

Isso não é vermelho. Alguma ideia de como fazer isso funcionar?

  • 1 respostas
  • 24 Views
Martin Hope
David Thielen
Asked: 2023-12-21 02:32:10 +0800 CST

Renderização do mapa Azure - o nome do pino não pode ter um '

  • 5

Estou usando Azure.Maps.Rendering e encontrei um bug com o seguinte:

public async Task<byte[]> GetMapThumbnailAsync(string? name, double longitude, double latitude)
{

    var pushPins = new List<ImagePushpinStyle>();
    if (!string.IsNullOrEmpty(name))
    {
        var position = new PushpinPosition(longitude, latitude, name);
        var pushpinSet = new ImagePushpinStyle(new List<PushpinPosition>() { position })
        {
            PushpinScaleRatio = 0.8, //1.2,
            PushpinColor = Color.Red,
            LabelColor = Color.Green,
            LabelScaleRatio = 10 //18
        };
        pushPins.Add(pushpinSet);
    }

Inicialmente passei o nome "Casa de Dave" e isso gerou uma exceção de:

{"pins":["Invalid format for location value ''Dave's home'-105.13008 39.98274'. Expected a floating-point longitude between -180 and 180."]}

Então, como faço para passar um 'nome?

E há algum outro personagem que fará com que ele falhe?

  • 1 respostas
  • 19 Views
Martin Hope
David Thielen
Asked: 2023-12-17 23:45:14 +0800 CST

Como o Blazor sabe quando procurar uma alteração de parâmetro

  • 5

Digamos que eu tenha as duas caixas de combinação a seguir (todas pseudocódigo):

<ComboBox Data="@AllLastNames" @bind-Value="@LastName"/>
<ComboBox Data="@AllFirstNames" @bind-Value="@FirstName"/>

E o código por trás é:

private string LastName { get; set; }
private string FirstName { get; set; }

private List<string> AllLastNames => _allLastNames;
private List<string> AllFirstNames => _firstNameDictionary[LastName];

Ok, tudo o que foi dito acima funcionará muito bem se o Blazor, nos momentos apropriados, obtiver AllFirstNames, ver que ele mudou por meio de uma comparação de igualdade de referência e chamar SetParameteraAsync()com o novo valor.

Então, quando/por que e como o Blazor decide verificar essas Data=propriedades para ver se elas foram alteradas?

Este é um caso em que, dentro do LastNamesetter, devo ligar StateHasChanged()?

blazor
  • 4 respostas
  • 46 Views
Martin Hope
David Thielen
Asked: 2023-12-14 03:40:58 +0800 CST

Azure Blob AppendBlobClient.AppendBlob() lançando uma exceção

  • 6

Para o código:

AppendBlobClient.AppendBlob(Stream) 

Às vezes estou recebendo a exceção:

The value for one of the HTTP headers is not in the correct format.
RequestId:9d7754b2-4e3d-4256-97f8-f77b43ab3756
Time:2023-12-13T19:36:11.536Z
Status: 400 (The value for one of the HTTP headers is not in the correct format.)
ErrorCode: InvalidHeaderValue

Additional Information:
HeaderName: content-length
HeaderValue: 0

Content:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Error>
  <Code>InvalidHeaderValue</Code>
  <Message>The value for one of the HTTP headers is not in the correct format.
RequestId:9d7754b2-4e3d-4256-97f8-f77b43ab3756
Time:2023-12-13T19:36:11.536Z</Message>
  <HeaderName>content-length</HeaderName>
  <HeaderValue>0</HeaderValue>
</Error>

Headers:
Server: Azurite-Blob/3.26.0
x-ms-error-code: InvalidHeaderValue
x-ms-request-id: 9d7754b2-4e3d-4256-97f8-f77b43ab3756
Date: Wed, 13 Dec 2023 19:36:11 GMT
Connection: keep-alive
Keep-Alive: REDACTED
Transfer-Encoding: chunked
Content-Type: application/xml

Aula completa:

public class BlobQueueWriter : QueueWriterBase
{
    private BlobServiceClient ServiceClient { get; }
    private string ContainerName { get; }
    private string BlobName { get; }
    private BlobContainerClient Container { get; set; }
    private AppendBlobClient AppendBlob { get; set; }

    /// <summary>
    /// Create the object. This will prepare to write to BLOB storage
    /// </summary>
    /// <param name="azureBlobConnectionString">The Azure connection string.</param>
    /// <param name="path">The full pathname of the BLOB to write to. Includes the container.</param>
    /// <param name="options">The options for this logger.</param>
    public BlobQueueWriter(string? azureBlobConnectionString, string path, BlobLoggerOptions options) : base(options)
    {
        ServiceClient = new BlobServiceClient(azureBlobConnectionString);
        (ContainerName, BlobName) = path.SplitBlobFilename();
        Container = ServiceClient.GetBlobContainerClient(ContainerName);
        AppendBlob = Container.GetAppendBlobClient(BlobName);

        // the ILoggerProvider starts everything with a constructor call - so no async
        Container.CreateIfNotExists();

        // create the blob if it does not exist
        if (!AppendBlob.Exists())
            AppendBlob.CreateIfNotExists();
    }

    private static readonly byte[] CrLf = "\r\n"u8.ToArray();

    /// <inheritdoc />
    public override void WriteLine(List<string> messages)
    {
        try
        {
            using (var stream = new MemoryStream())
            {
                foreach (var message in messages)
                {
                    var bytes = Encoding.UTF8.GetBytes(message);
                    stream.Write(bytes, 0, bytes.Length);
                    stream.Write(CrLf);
                }

                stream.Position = 0;
                AppendBlob.AppendBlock(stream);
            }

        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine($"BlobQueueWriter.WriteLine() threw exception {ex}");
            Container = ServiceClient.GetBlobContainerClient(ContainerName);
            AppendBlob = Container.GetAppendBlobClient(BlobName);
        }
    }
}

Alguma ideia do que há de errado?

  • 1 respostas
  • 22 Views
Martin Hope
David Thielen
Asked: 2023-12-12 01:06:32 +0800 CST

Como posso fazer com que um componente diga a outro componente para reler seus dados?

  • 6

Eu tenho o seguinte no meu Dashboard.razor

<FilteredEventsGrid Start="0"
    ShowEndDate="true"
    Filter="SmartQueries.Filter.Owner | SmartQueries.Filter.IncludeDisabled"
    CanEditOwner="false"/>

<FilteredEventsGrid Start="0"
    ShowEndDate="true"
    Filter="SmartQueries.Filter.Pending | SmartQueries.Filter.Private"
    CanEditOwner="false"/>

Existem alguns eventos que estão em ambas as grades. Ambas as grades permitem a edição de eventos nelas. Então, quando um evento em uma das grades é editado, como ele pode dizer à outra grade para reler seus dados? (Cada um lê seus dados internamente, não há Dataparâmetro.)

O melhor que encontrei é <FilteredEventsGrid>um ValueChangedEventCallback. E ambos têm um Refresh()método. Quando o pai obtém o ValueChangedevento, ele chama Refresh()o outro componente.

blazor
  • 1 respostas
  • 28 Views
Martin Hope
David Thielen
Asked: 2023-12-08 00:11:50 +0800 CST

URL para mapear o aplicativo

  • 5

Em uma página da web posso fazer um link curtir <a href="tel:3035551212">Information</a>e clicar que irá discar aquele número da página da web que é exibido em um navegador de um telefone.

Existe um URL que abrirá o aplicativo de mapas do telefone em um local específico, especificando opcionalmente também o endereço desse local?

  • 1 respostas
  • 15 Views
Martin Hope
David Thielen
Asked: 2023-12-01 00:36:40 +0800 CST

Como posso usar o serviço Azure Map para obter uma miniatura?

  • 5

Como posso usar o serviço Azure Map para retornar para mim um bitmap que é:

  1. Um tamanho especificado (256 x 256 pixels para meu caso de uso)
  2. Uma extensão especificada, por exemplo, 100 milhas x 100 milhas
  3. Centrado em uma latitude/longitude específica
  4. Com um alfinete naquele Lat/Long.
  • 1 respostas
  • 9 Views
Martin Hope
David Thielen
Asked: 2023-11-14 05:03:44 +0800 CST

Preciso instanciar novamente o EditContext se o valor for alterado?

  • 5

Eu tenho um parâmetro:

[Parameter]
public RateItemModel Value { get; set; } = default!;

Minha página de barbear tem:

<EditForm EditContext="EditContext" OnValidSubmit="HandleValidSubmitAsync" OnInvalidSubmit="HandleInvalidSubmitAsync" Context="editFormContext">

E durante a inicialização eu faço o seguinte:

EditContext = new EditContext(Value);

Preciso substituir OnParametersSetAsync()e sempre que Valuefor alterado, instanciar novamente EditContext?

Atualizar:

Aqui está o caso de uso. Eu tenho uma lista de cartões de inscrição. Cada cartão de inscrição permite clicar para participar ou não. Quando o usuário clica, o cartão permanece ativo, mas o compromisso alterado deve ser gravado no banco de dados e o cartão precisa exibir o valor do compromisso alterado.

A solução fácil é escrever o novo valor em SignupCard.Commitment, mas isso é proibido. Então...

  1. O clique do usuário altera o valor de Model.Commitment e chama OnClick.
  2. O OnClick cria um Signupobjeto com a Commitmentpropriedade definida para o novo valor.
  3. O EventCardcomponente chama ValueChangeda passagem desse Signupobjeto para a página da lista pai.
  4. A página da lista possui um array atribuído ListPage.Dataà DxListBox.Valuespropriedade do DxListBox.
  5. Ele executa uma cópia superficial desta lista para uma lista temporária var.
  6. A inscrição alterada é atribuída a list[index]essa lista temporária, substituindo o valor antigo.
  7. Os dados também são atualizados no banco de dados.
  8. Esta lista é atribuída a 'ListPage.Data`
  9. A DxListBox.Valuespropriedade é assim alterada. Então agora atualiza SignupCard.Valuepara todos os cartões da lista.
  10. O SignupCardque deu início a tudo isso agora ganha um novo arquivo Value.
  11. Isto agora é aplicado ao " ignupCard.Model(que não deve mudar nada).
  12. E acredito que também preciso recriar EditContextusando esse novo arquivo Value.
blazor
  • 2 respostas
  • 28 Views
Martin Hope
David Thielen
Asked: 2023-11-11 03:13:15 +0800 CST

Como executar o código quando o segundo método for concluído

  • 5

Tenho uma situação em que preciso executar algum código no final de 1 de 2 métodos - o que for concluído em segundo lugar. Meu caso particular é o servidor Blazor onde preciso executar este código no final de OnInitializedAsync()/OnAfterRenderAsync(). Nesse caso, o código depende de o JavaScript poder ser chamado e de o modelo da página ser totalmente preenchido a partir do banco de dados.

Eu criei a seguinte classe para fazer isso:

public class DoubleFinish
{
    private volatile bool _firstFinished = false;
    private volatile bool _secondFinished = false;
    private volatile bool _alreadyReturnedTrue = false;

    /// <summary>
    /// Call when the first method completes. Returns true if the 2nd method is also
    /// complete and so this method can now run the code that requires both methods.
    /// </summary>
    public bool TryFirstFinished
    {
        get
        {
            lock (this)
            {
                _firstFinished = true;
                if (_alreadyReturnedTrue || ! _secondFinished)
                    return false;
                _alreadyReturnedTrue = true;
                return true;
            }
        }
    }

    /// <summary>
    /// Call when the second method completes. Returns true if the 1st method is also
    /// complete and so this method can now run the code that requires both methods.
    /// </summary>
    public bool TrySecondFinished
    {
        get
        {
            lock (this)
            {
                _secondFinished = true;
                if (_alreadyReturnedTrue || ! _firstFinished)
                    return false;
                _alreadyReturnedTrue = true;
                return true;
            }
        }
    }
}

Então, em meu arquivo razor.cs, tenho o seguinte (os dois métodos em que estão podem estar em tarefas diferentes e, portanto, estar em execução ao mesmo tempo):

OnInitializedAsync() {
    // ... lots of DB access
    if (DoubleFinish.TryFirstFinished)
        await OnAfterInitializeAndRenderAsync();
}

OnAfterRenderAsync(bool firstRender) {
    if (!firstRender)
        return;
    if (DoubleFinish.TrySecondFinished)
        await OnAfterInitializeAndRenderAsync();
}

Eu tenho duas perguntas:

  1. Preciso declarar os bools em DoubleFinish volatile?
  2. Existe algum tipo de chamada atômica para verificar/definir os valores bool que evita o uso de lock?

Atualização: uma restrição importante. OnInitializedAsync()pode ser chamado duas vezes em algumas configurações. Então não posso usar um contador. Tenho que monitorar especificamente se cada método foi concluído.

c#
  • 2 respostas
  • 57 Views
Martin Hope
David Thielen
Asked: 2023-11-06 01:53:57 +0800 CST

Substituindo um serviço no bUnit

  • 5

Eu tenho um TestContextmétodo Setup() que adiciona todos os serviços que minhas páginas precisam. É muito bom ter um lugar que configura todos os mais de 30 serviços.

Às vezes preciso de um serviço simulado diferente para um teste. Então preciso substituir o serviço padrão.

Tentei definir um específico depois de ligar para o meu Setup()e funcionou. Isso é compatível? Que o último Services.AddSingleton()é usado? Ou é apenas assim que o código está escrito atualmente e pode mudar?

Tentei ligar Services.Remove<IMyService>(), mas isso me deu um erro de compilador.

bunit
  • 1 respostas
  • 15 Views
Martin Hope
David Thielen
Asked: 2023-11-05 02:30:38 +0800 CST

Se eu usar <ErrorBoundary>, Error.cshtml será exibido?

  • 5

Quando o Visual Studio cria o aplicativo de servidor Blazor básico, ele inclui um arquivo Error.cshtml. Pelo que entendi, isso é exibido se houver uma exceção não tratada durante a renderização.

Mas se em MainLayout.razor eu tiver:

<ErrorBoundary>
    <ChildContent>
        <!-- ... -->
    </ChildContent>
    <ErrorContent Context="error">
        <!-- ... -->
    </ErrorContent>
</ErrorBoundary>

Alguma vez será Error.cshtmlexibido? Ou <ErrorContent>agora trata de todos os casos de onde Error.cshtmlfoi exibido anteriormente.

Eu pergunto porque configurei dessa forma e nunca tive a página de erro aparecendo. Então acho que não é usado se <ErrorBoundary>estiver definido. Mas me preocupo por não ter atingido uma exceção nas circunstâncias em que ela será exibida.

blazor
  • 1 respostas
  • 26 Views
Martin Hope
David Thielen
Asked: 2023-10-26 22:40:24 +0800 CST

Posso definir uma raiz de domínio para links nas páginas do GitHub?

  • 5

Estou criando um guia do usuário para meu aplicativo Web usando as páginas do GitHub no repositório do aplicativo Web.

Quero ter links no guia do usuário para as páginas apropriadas no aplicativo da web. Posso codificar tudo. Mas eu prefiro definir o domínio do aplicativo em um só lugar e usar esse domínio para todos os URLs.

Então, algo como:

ROOT_DOMAIN=MyApp.com

E então na remarcação temos [Login](%ROOT_DOMAIN%/account/login). Existe uma maneira de fazer isso?

github
  • 1 respostas
  • 13 Views
Martin Hope
David Thielen
Asked: 2023-09-24 08:39:47 +0800 CST

Como posso atualizar uma lista em cache onde outros threads retêm a lista de cache antiga

  • 6

Eu tenho uma lista de usuários em cache no meu aplicativo. Algumas páginas de administração precisam da lista de todos os usuários (o total é pequeno o suficiente, isso não é um problema).

A abordagem que estou adotando é:

  1. Quando a lista em cache for solicitada, essa lista não será alterada.
  2. Quando um usuário é CrUD, há uma chamada para adicioná-lo ao cache.
  3. Quando essa chamada é feita, a lista existente é copiada para a nova lista e o usuário CrUD é adicionado/atualizado/removido da lista. E essa lista é então a nova lista em cache.

Boa ideia. Mas acabei de escrever alguns testes de unidade que fazem isso e não funcionam. Porque 2 threads estão reconstruindo a lista e aquele que a escreve em segundo lugar vence. Posso fazer uma lock (this)reconstrução da lista e isso funciona muito bem.

Mas essa é uma abordagem terrível. Ótimo para identificar o problema, mas não é bom na produção.

Em uso normal, essa abordagem de qualquer lista retornada é imutável e funciona muito bem. Como posso fazer isso sem um lock?

Em C#, mas esta é uma questão independente de linguagem, embora possa haver alguma classe C#, etc., que torna esta uma solução fácil.

c#
  • 1 respostas
  • 30 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve