Uh oh!
There was an error while loading. Please reload this page.
Add async support to SftpClient and SftpFileStream - #819
Conversation
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
| { | ||
| throw; | ||
| } | ||
| catch (Exception) |
There was a problem hiding this comment.
Should the generic class Exception be caught here? Or something more specific?
There was a problem hiding this comment.
Possibly, but I only reused the logic of sync versions of the functions at this time. When/if this is released, practice will show if any changes need to be made.
There was a problem hiding this comment.
When FileMode is Create, I think we should just use Flags.CreateNewOrOpen | Flags.Truncate.
Let me run some checks later.
There was a problem hiding this comment.
I can confirm that it's ok to just add Flags.CreateNewOrOpen | Flags.Truncate when mode is FileMode.Create.
Uh oh!
There was an error while loading. Please reload this page.
| if (count < 0) | ||
| throw new ArgumentOutOfRangeException("count"); | ||
| if ((buffer.Length - offset) < count) | ||
| throw new ArgumentException("Invalid array range."); |
There was a problem hiding this comment.
Specify second parameter to ArgumentException, nameof(buffer).
There was a problem hiding this comment.
I'm not sure about that, any of the three could be wrong, depending on the caller's intention. Anyhow, this is the same as the sync version, so we either need to change both or none...
| /// <exception cref="SftpPermissionDeniedException">Permission to list the contents of the directory was denied by the remote host. <para>-or-</para> A SSH command was denied by the server.</exception> | ||
| /// <exception cref="SshException">A SSH error where <see cref="Exception.Message" /> is the message from the remote host.</exception> | ||
| /// <exception cref="ObjectDisposedException">The method was called after the client was disposed.</exception> | ||
| public async Task<IEnumerable<SftpFile>> ListDirectoryAsync(string path, CancellationToken cancellationToken) |
There was a problem hiding this comment.
Consider returning ICollection or IReadOnlyCollection rather than IEnumerable as per the Microsoft Guidelines for Collections.
DO use Collection or a subclass of Collection for properties or return values representing read/write collections.
There was a problem hiding this comment.
This should be IAsyncEnumerable<SftpFile>. It's only supported on .NET 4.6.1 or higher.
For .NET 4.6.1 and .NET Standard 2.0, you need to add a reference to Microsoft.Bcl.AsyncInterfaces.
There was a problem hiding this comment.
Then we need to remove FEATURE_TAP from netstandard1.3. Also, we take two "external" dependencies (AsyncInterfaces and Task.Extensions).
What if we leave this one as it is and add IAsyncEnumerable<SftpFile> EnumerateDirectoryAsync(...) for netstandard2.1+ ?
There was a problem hiding this comment.
I won't let this block this merge request, but I still strongly consider changing this method to return IAsyncEnumerable<SftpFile>. I also don't like bringing in additional dependencies, but the alternative is not better.
Uh oh!
There was an error while loading. Please reload this page.
schaveyt
commented
Sep 25, 2021
Any chance this could also target .net5 or .net6 as well |
IgorMilavec
commented
Sep 29, 2021
The library already targets netstandard2.0, so you can reference it from net5 or net6 projects. |
schaveyt
commented
Sep 29, 2021
I did not connect those dots. Thank you for clarifying 👍 |
paulmaybee
commented
Oct 22, 2021
This addition looks like it has a great deal of value. Is there a timetable or estimate for when the PR will be completed? |
IgorMilavec
commented
Oct 25, 2021
This PR if functionally complete IMO. It should also be stable, I have been running it in production since July. Now we need @drieseng to review and merge it. |
drieseng
commented
Oct 25, 2021
@IgorMilavec Thanks, I'll try to find time in the coming days. |
IgorMilavec
commented
Nov 4, 2021
Figured this is the last chance to modify UploadFileAsync signature before this becomes a breaking change... :) |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Core async support requested by #153.
Added async support to BaseClient: (update 2021-05-11)
Added async support to SftpClient:
Added async support to SftpFileStream:
Added net46 target to use async in .NET Framework.
This PR is intended to resolve#153.
This PR is intended to supersede #300 and #661.