Если причиной исключения является то, что таблица уже существует, почему бы не использовать BeginCreateTableIfNotExist
/ EndCreateTableIfNotExist
.
ОБНОВЛЕНИЕ:
Эта ошибка не имеет ничего общего с Windows Azure.Я могу воспроизвести то же поведение с помощью простой программы:
open System
open System.Windows.Forms
let bufferData = Array.zeroCreate<byte> 100000000
let async1 filename =
async{
try
use outputFile = System.IO.File.Create(filename)
do! outputFile.AsyncWrite(bufferData)
MessageBox.Show("OK") |> ignore
with
| :? ArgumentException -> printfn "Failed with ArgumentException"; MessageBox.Show("Failed with ArgumentException") |> ignore
| _ -> printfn "Failed with unknown exception"; MessageBox.Show("Failed with unknown exception") |> ignore
} |> Async.Start
let main(args) =
let form = new Form(Text = "Test Form")
let button1 = new Button(Text = "Start")
let button2 = new Button(Text = "Start Invalid", Top = button1.Height + 10)
form.Controls.AddRange [| button1; button2; |]
button1.Click.Add(fun args -> async1 "longoutput.dat")
// Try an invalid filename to test the error case.
button2.Click.Add(fun args -> async1 "|invalid.dat")
let result = form.ShowDialog()
0
let _ = main([||])
Странно то, что код отлично работает в F # Interactive, но не может перехватывать исключения при отладке в виде приложения Windows в VisualStudio (не имеет значения отладочная или релизная конфигурация).Даже странно, что он снова работает нормально, если выполняется как приложение за пределами Visual Studio.
Если вам интересно, эта программа адаптирована из примера MSDN , в котором обнаружена та же проблема..
ОБНОВЛЕНИЕ 2:
Аналогичный вопрос был задан на http://cs.hubfs.net/topic/Some/0/59516. Как отметили @ildjarn и @Brian, эта ошибка была исправлена вVS2010 SP1.Без VS2010 SP1 вы также можете протестировать свой код с помощью F # Interactive и без проблем выполнить приложение за пределами VS.