Atualmente, estou começando a criar um aplicativo que beneficiaria muito com o recurso de espera assíncrona do C # 5. Mas não tenho certeza de qual versão do VS e do tempo de execução assíncrono usar.
Analisando os gráficos de popularidade do sistema operacional, precisarei dar suporte ao Windows XP por mais três anos. Parece que o .net 4.5 é executado apenas nas versões mais recentes do Windows, então eu preciso direcionar o .net 4.0. As máquinas de desenvolvimento usam o Windows 7, portanto, usar uma versão mais recente do VS não é um problema.
Agora, primeiro preciso escolher um compilador para fazer isso:
- VS2010 com AsyncCTP
- Visualização do VS2012 (e final quando chegar), definindo o destino como .net 4.0
- Mono (parece que a versão 2.12 tem async-waitit, eu prefiro / estou acostumado a VS do que o MonoDevelop como IDE)
Qual deles possui menos bugs de geração de código? Olhando para o blog de Jon Skeet, o VS2012 Preview usa um gerador de código que nunca o CTP.
E, mais importante, qual tempo de execução usar?
O VS2012 contém um tempo de execução assíncrono redistribuível para uso com o .net 4?
Consegui compilar o código, com a visualização, fazendo referência ao tempo de execução do AsyncCTP. Mas como o CTP tem condições estranhas de licenciamento, isso não parece uma boa solução a longo prazo.
Ou devo usar uma implementação de terceiros? Talvez mono tem um?
Para distribuir a biblioteca, prefiro simplesmente colocar a dll no mesmo diretório que o aplicativo, em vez de algum tipo de instalador.
Eu também gostaria que meus binários funcionassem sem alterações no mono + Linux / MacOS. Portanto, o tempo de execução deve ser compatível com qualquer mono (2.12 provavelmente) incorporado ou permitir o uso em sistemas operacionais que não são do Windows.
Respostas:
A Microsoft lançou o Async Targeting Pack (Microsoft.Bcl.Async) através do Nuget como um substituto para o AsyncCTP.
Você pode ler mais sobre isso aqui: http://blogs.msdn.com/b/bclteam/archive/2013/04/17/microsoft-bcl-async-is-now-stable.aspx .
Você pode ler sobre a versão anterior aqui: http://blogs.msdn.com/b/lucian/archive/2012/04/24/async-targeting-pack.aspx .
Como esse pacote é oficialmente suportado, agora acredito que a melhor opção para direcionar o XP + assíncrono seria usar o Visual Studio 2012 + C # 5 + Pacote de direcionamento assíncrono.
No entanto, se você sentir a necessidade de direcionar o .NET 3.5, ainda poderá usar (meu) AsyncBridge for .NET 3.5 .
fonte
Se você está aberto a considerar outras linguagens .Net, o F # pode resolver seu problema. Ele possui a expressão de computação assíncrona {} há anos e é compatível com versões anteriores, mesmo com o .Net 2.0. O requisito mínimo é o Windows XP SP3. O tempo de execução pode ser baixado aqui .
fonte
É possível usar o VS 12 beta para direcionar o .NET 4.0 usando async / waitit.
Você precisa copiar algum código no seu projeto que forneça os tipos nos quais o compilador depende.
Detalhes aqui
Edit: pegamos essa técnica e a transformamos em uma biblioteca de código aberto chamada AsyncBridge: https://nuget.org/packages/AsyncBridge
fonte
Se você deseja distribuir seu software, acho que a solução Mono é realmente sua única opção no momento. Você também diz que deseja que o resultado final seja executado no Mono no Linux e no OS X. A segmentação do Mono para começar parece ser a solução natural.
Sua próxima edição é o IDE. O MonoDevelop obviamente funcionaria bem, mas você diz que prefere o Visual Studio.
Greg Hurlman criou um perfil para codificar no Mono 2.8 a partir do Visual Studio. Se você o acompanhar, ele poderá apontá-lo na direção certa para o desenvolvimento contra o Mono 2.11 / 2.12 no Visual Studio.
Obviamente, também há o Mono Tools for Visual Studio, que é um produto comercial. Presumo que ainda esteja sendo oferecido pela Xamarin .
Você também pode executar os assemblies de perfil 4.5 exigidos do Mono sobre o .NET, mas eu não tentei isso. O perfil 4.5 é um superconjunto estrito da API 4.0. Talvez dê uma chance e relate de volta.
EDIT: Parece que talvez você possa usar o CTP do Visual Studio Async em produção agora
Aqui está o que diz na página de download :
fonte
Async...Builder
e...Awaiter
) são muito difíceis de separar do resto das mono. Atualmente, estou pensando em reimplementarAsyncCtpLibrary
, possivelmente emprestando um pouco do mono.AsyncCtpLibrary
, sei que é possível em princípio, mas, por um lado, a licença contém algumas cláusulas estranhas. Mas a minha questão principal aqui é o que acontece a longo prazo. Se não for suportado e ninguém corrigir bugs, isso pode ser irritante.Se você deseja começar a distribuir seu software após o MS lançar o C # 5.0, poderá começar a desenvolver usando o AsycnCTP. Caso contrário, eu não recomendaria que você o usasse, pois é apenas CTP, nem mesmo um beta. Pode ser alterado muito perto do estágio beta e do lançamento. Pode ser instável, etc.
Se você deseja introduzir operações assíncronas fáceis no seu aplicativo, recomendo que você use Extensões Reativas e outras coisas construídas na parte superior (Interface do Usuário Reativa, etc), isso é simplesmente maravilhoso.
Quanto ao VS2012, ele também contém o mesmo CTP assíncrono, tanto quanto me lembro do meu // Build / tablet que a MS me deu nessa conferência.
fonte