WCF Async-bewerking + IO-bewerking

Wat is het voordeel van het schrijven van de volgende WCF-servicebewerking met Async CTP?

Task.Factory.StartNew zal de thread thread thread hoe dan ook blokkeren voor de duur van de langeRunningIOOperation?

    public Task SampleMethodAsync(string msg)
    {
        return await Task.Factory.StartNew(() =>
        {
            return longRunningIOOperation();
        });
    }

Is er een betere manier om dit te schrijven, zodat we van IO-voltooiingsdraden profiteren?

1

2 antwoord

U moet ook de asynchrone bewerking longRunningIOOperation uitvoeren. Zolang een bewerking in uw code de thread blokkeert, wordt een of andere thread geblokkeerd, of het nu een threadpool is of een thread waarin uw bewerking werd aangeroepen. Als uw bewerking asynchroon is, kunt u iets schrijven dat lijkt op de onderstaande code.

public Task SampleMethodAsync(string msg)
{
    var tcs = new TaskCompletionSource();
    longRunningIOOperationAsync().ContinueWith(task =>
    {
        tcs.SetResult(task.Result);
    });
    return tcs.Task;
}
1
toegevoegd
Heel erg bedankt voor uw antwoord.
toegevoegd de auteur dot net learner, de bron

Eindelijk heb ik ontdekt hoe dit werkt. Ik heb .net FX4.5 geïnstalleerd en alles werkte als een charme.

In mijn scenario belt Service A op deze manier naar Service B.

public class ServiceA : IServiceA
{
    public async Task GetGreeting(string name)
    {
        ServiceBClient client = new ServiceBClient();
        return await client.GetGreetingAsync();
    }
}

client.GetGreetingAsync() duurt 10 seconden om te verwerken. Mijn onderstading is Service A-verzoek thread zal niet worden geblokkeerd door te bellen naar GetGreetingAsync ().

Kun je uitleggen hoe dit door WCF achter de schermen wordt geïmplementeerd of naar een aantal documentatie verwijzen om te begrijpen hoe dit allemaal werkt vanuit het perspectief van WCF?

0
toegevoegd